var BAAppProfile = {"profileName":"Portal Web","lastUpdated":1680028835383,"profileId":970,"created":1678373959392,"baAttributes":{"ajaxMetricsEnabled":true,"resourceMetricsThreshold":0,"proxyEnabled":false,"urlIncludeList":[],"ajaxMetricsThreshold":0,"geoEnabled":true,"browserLoggingEnabled":true,"pageLoadMetricsThreshold":0,"jsFunctionMetricsThreshold":0,"jsErrorsEnabled":true,"cookieCaptureEnabled":true,"urlExcludeList":[],"domChangePollingInterval":100,"allowCookies":true,"browserAgentEnabled":true,"proxyUrl":"","resourceMetricsEnabled":true,"metricFrequency":3750,"domChangeTimeout":10000,"pageLoadMetricsEnabled":true,"ajaxErrorsEnabled":false,"collectorUrl":"https:\/\/dxc.dxi-na1.saas.broadcom.com\/api\/1\/urn:ca:tenantId:A577E02B-E720-5C1A-6C59-B3B9D7DA24BA\/urn:ca:appId:Portal%20Web\/browserMetrics","sessionTimeout":3600000,"softPageMetricsEnabled":true,"jsFunctionMetricsEnabled":false}};
/**
 * CA Experience Collector - Browser Agent 
 * b380e5718e7ea836804432180c3d4351c538f1186c2b212a37b6359f0977ffa7 #84 
 * Copyright (c) 2018 CA. All Rights Reserved.
 */
try{if(void 0===BrowserAgentExtension)var BrowserAgentExtension={isBAAlive:function(){return"undefined"!=typeof BrowserAgent&&!0===BrowserAgent.globals.configs.BROWSERAGENTENABLED},init:function(){BrowserAgentExtension.replaceUrls()},extAddJSFuncToInstrument:function(){},extAddCustomPageMetric:function(){},extAddCustomOptionalProperty:function(){},extNameFormatter:function(e,n,o,r,t){},isClickedEventARouteChange:function(e){return null},replaceUrls:function(e){}}}catch(e){window.BrowserAgent&&BrowserAgent.logger?BrowserAgent.logger.error("BrowserAgentExtensionError: "+e.message):window&&window.console&&window.console.log("BrowserAgentExtensionError: "+e.message)}

/**
 * CA Experience Collector - Browser Agent 
 * b380e5718e7ea836804432180c3d4351c538f1186c2b212a37b6359f0977ffa7 #84 
 * Copyright (c) 2018 CA. All Rights Reserved.
 */
try{if(void 0!==BrowserAgent)throw new Error("Detected multiple instances of Browser Agent. Skipping monitoring for this instance.");var BrowserAgent={};if(void 0===BrowserAgentBootstrap)var BrowserAgentBootstrap={origFuncMap:{}};BrowserAgent.globals={init:function(){BrowserAgent.globals.defaultMetricDefs=BrowserAgent.globals.setDefaultMetricDefs();var e={};e.schemaVersion=BrowserAgent.jsonUtils.jsonConstants.SCHEMA_VERSION,e.creator={name:BrowserAgent.jsonUtils.jsonConstants.CREATOR_NAME,version:BrowserAgent.jsonUtils.jsonConstants.CREATOR_VERSION},e.clientInfo={},navigator.userAgent&&(BrowserAgent.browserUtils.isiOSWebViewAgent(navigator.userAgent)?e.clientInfo.userAgent=BrowserAgent.browserUtils.getiOSUserAgent(navigator.userAgent):e.clientInfo.userAgent=navigator.userAgent),BrowserAgent.globals.browserFingerprint&&(e.clientInfo.fingerPrint=BrowserAgent.globals.browserFingerprint),BrowserAgent.globals.platform&&(e.clientInfo.browserType=BrowserAgent.globals.platform),BrowserAgent.globals.platformVersion&&(e.clientInfo.browserMajorVersion=BrowserAgent.globals.platformVersion),e.app={ba:{pages:{pageList:[]}}},BrowserAgent.globals.appInfo.id&&(e.app.id=BrowserAgent.globals.appInfo.id),BrowserAgent.globals.appInfo.key&&(e.app.key=BrowserAgent.globals.appInfo.key),e.app.version=BrowserAgent.jsonUtils.jsonConstants.APP_VERSION,e.app.isSynthetic=BrowserAgent.globals.isSyntheticData,BrowserAgent.globals.appInfo.version&&(e.app.version=BrowserAgent.globals.appInfo.version),e.app.useAxaAppName=BrowserAgent.jsonUtils.jsonConstants.APP_USE_AXAAPP_NAME,BrowserAgent.globals.appInfo.useAxaAppName&&(e.app.useAxaAppName=BrowserAgent.globals.appInfo.useAxaAppName),BrowserAgent.globals.appInfo.tenantId&&(e.app.tenantId=BrowserAgent.globals.appInfo.tenantId),BrowserAgent.globals.profileInfo&&(e.app.profileInfo=BrowserAgent.globals.profileInfo),BrowserAgent.globals.eumJSONShell=e,BrowserAgent.globals.lastCorBrowserGUIDsUsed=new BrowserAgent.Set(1e3),BrowserAgent.globals.processedResourceEntries=new BrowserAgent.Set},getSequenceNum:function(){return BrowserAgent.globals.sequenceNum+=1,BrowserAgent.globals.sequenceNum},fetchGlobalSyntheticFlag:function(){BrowserAgent.logger.info("BrowserAgent.fetchGlobalSyntheticFlag: Global synthetic value:"+window.isSynthetic),void 0!==window.isSynthetic&&window.isSynthetic!=BrowserAgent.globals.isSyntheticData&&(BrowserAgent.globals.isSyntheticData=window.isSynthetic,BrowserAgent.logger.info("BrowserAgent.fetchGlobalSyntheticFlag: IsSyntheticData flag"+BrowserAgent.globals.isSyntheticData))},peekSequenceNum:function(){return BrowserAgent.globals.sequenceNum+1},setDefaultMetricDefs:function(){return{NTAPI_PRT:{name:"Page Render Time",unit:BrowserAgent.globals.defaultMetricUnits.MILLI,type:BrowserAgent.globals.metricAggregatorType.INT_LONG_DURATION},NTAPI_DPT:{name:"DOM Processing Time",unit:BrowserAgent.globals.defaultMetricUnits.MILLI,type:BrowserAgent.globals.metricAggregatorType.INT_LONG_DURATION},NTAPI_PLT:{name:"Page Load Time",unit:BrowserAgent.globals.defaultMetricUnits.MILLI,type:BrowserAgent.globals.metricAggregatorType.INT_LONG_DURATION},NTAPI_PST:{name:"Page Stall Time",unit:BrowserAgent.globals.defaultMetricUnits.MILLI,type:BrowserAgent.globals.metricAggregatorType.INT_LONG_DURATION},NTAPI_PPUT:{name:"Previous Page Unload Time",unit:BrowserAgent.globals.defaultMetricUnits.MILLI,type:BrowserAgent.globals.metricAggregatorType.INT_LONG_DURATION},NTAPI_DLT:{name:"Domain Lookup Time",unit:BrowserAgent.globals.defaultMetricUnits.MILLI,type:BrowserAgent.globals.metricAggregatorType.INT_LONG_DURATION},NTAPI_TTFB:{name:"Time to First Byte",unit:BrowserAgent.globals.defaultMetricUnits.MILLI,type:BrowserAgent.globals.metricAggregatorType.INT_LONG_DURATION},NTAPI_TTLB:{name:"Time to Last Byte",unit:BrowserAgent.globals.defaultMetricUnits.MILLI,type:BrowserAgent.globals.metricAggregatorType.INT_LONG_DURATION},NTAPI_CET:{name:"Connection Establishment Time",unit:BrowserAgent.globals.defaultMetricUnits.MILLI,type:BrowserAgent.globals.metricAggregatorType.INT_LONG_DURATION},PAGE_HPI:{name:"Page Hits Per Interval",unit:BrowserAgent.globals.defaultMetricUnits.NO_UNIT,type:BrowserAgent.globals.metricAggregatorType.LONG_INTERVAL_COUNTER},FUNC_ET:{name:"Execution Time",unit:BrowserAgent.globals.defaultMetricUnits.MILLI,type:BrowserAgent.globals.metricAggregatorType.INT_LONG_DURATION},FUNC_ICPI:{name:"Invocation Count Per Interval",unit:BrowserAgent.globals.defaultMetricUnits.NO_UNIT,type:BrowserAgent.globals.metricAggregatorType.LONG_INTERVAL_COUNTER},AJAX_RLT:{name:"Resource Load Time",unit:BrowserAgent.globals.defaultMetricUnits.MILLI,type:BrowserAgent.globals.metricAggregatorType.INT_LONG_DURATION},AJAX_TTFB:{name:"Time To First Byte",unit:BrowserAgent.globals.defaultMetricUnits.MILLI,type:BrowserAgent.globals.metricAggregatorType.INT_LONG_DURATION},AJAX_RDT:{name:"Response Download Time",unit:BrowserAgent.globals.defaultMetricUnits.MILLI,type:BrowserAgent.globals.metricAggregatorType.INT_LONG_DURATION},AJAX_CBET:{name:"Callback Execution Time",unit:BrowserAgent.globals.defaultMetricUnits.MILLI,type:BrowserAgent.globals.metricAggregatorType.INT_LONG_DURATION},AJAX_ICPI:{name:"Invocation Count Per Interval",unit:BrowserAgent.globals.defaultMetricUnits.NO_UNIT,type:BrowserAgent.globals.metricAggregatorType.LONG_INTERVAL_COUNTER},RES_EPI:{name:"Resource Errors Per Interval",unit:BrowserAgent.globals.defaultMetricUnits.NO_UNIT,type:BrowserAgent.globals.metricAggregatorType.LONG_INTERVAL_COUNTER},PAGE_EPI:{name:"Page Errors Per Interval",unit:BrowserAgent.globals.defaultMetricUnits.NO_UNIT,type:BrowserAgent.globals.metricAggregatorType.LONG_INTERVAL_COUNTER},PAGE_UDT:{name:"User Decision Time",unit:BrowserAgent.globals.defaultMetricUnits.MILLI,type:BrowserAgent.globals.metricAggregatorType.INT_LONG_DURATION},AXA_NRT:{name:"Network Response Time",unit:BrowserAgent.globals.defaultMetricUnits.MILLI,type:BrowserAgent.globals.metricAggregatorType.INT_LONG_DURATION}}},pageWithEventsMap:{},sortedBucketList:[],processedResourceEntries:null,pageBucketsMap:{},pageBucketsMaxLen:100,maxLongValue:0x8000000000000000,evtTypes:{RES:"RES",JSERR:"JSERR",FN:"FN",AXAEXT:"AXAEXT",APMEXT:"APMEXT",HPLOAD:"HPLOAD",SPLOAD:"SPLOAD",TTIME:"TTIME"},evtHandlers:{},pageBucketTypes:{HP:"HP",SP:"SP"},currPagePtr:null,prevPagePtr:null,currSession:null,prevSessionList:[],sessionToChunkMap:{},sessionToActiveEUMPayloadMap:{},deferredPayloadProcessing:null,currTTimeEvtPtr:null,initPageInfo:null,eumJSONShell:null,softPageLoadEvtObj:null,harvestIntervalId:null,sequenceNum:-1,ajaxDataKeys:{URL:"url",METHOD:"method",ASYNC:"async",STATUS_CODE:"status",STATUS_TEXT:"statusText",RESPONSE_CONTENT_LENGTH:"resSize",REQUEST_BODY_SIZE:"reqSize",ERR:"err"},appInfo:null,bs:"-1",bt:"-1",btc:"-1",commaChar:",",equalChar:"=",configs:null,contentLengthHdrStr:"Content-Length",contentLengthHdrStrLowerCase:"content-length",appCookies:null,agentCookies:null,agentCookieKeys:"agentCookieKeys",agentCookieKeyName:{AGENTHOST:"AgentHost",SERVLETNAME:"ServletName",USERID:"UserId",AGENTPROCESS:"AgentProcess",AGENTNAME:"AgentName",WEBAPPNAME:"WebAppName"},agentCookiePrefix:"apm",agentCookieKeysRegexPattern:/^apm.+/,CorBrowsGUID:null,defaultBTRegex:/^Default BT( via (Chrome|Edge|Firefox|IE|Safari))?$/,defaultMetricDefs:null,defaultMetricUnits:{NO_UNIT:null,MILLI:"ms"},isSoftPageLoad:!0,domLastUpdated:null,domChangeTimeoutId:null,domChangeTimerId:null,domChangeObserver:null,domChangeObserverConfig:{childList:!0,characterData:!0,subtree:!0,attributes:!0},dotChar:".",softPageDataKeys:{START:"s",END:"e",REFERRER:"r",URL:"url"},emptyObjStr:"{}",forwardSlashChar:"/",functionsToInstrumentMap:{},tracerCacheMap:{},jsFuncPreTracerName:"BrowserAgent.funcUtils.tracers.JSFuncPre",jsFuncPostTracerName:"BrowserAgent.funcUtils.tracers.JSFuncPost",retryFuncIdMap:{},gapTimeInMillis:0,geoConstants:{ERROR:-255,DENIED:-401},geo:{lat:-401,lon:-401},hashChar:"#",isStoragePresent:!0,metricAggregatorType:{INT_LONG_DURATION:0,LONG_INTERVAL_COUNTER:1,STRING:2},metricPathConsts:{PREFIX:"Business Segment",BROWSER:"Browser",RES:"Resources",HTMLRES:"HTML",AJAX:"AJAX Call",SYNC:"Sync",ASYNC:"Async",FUNC:"JavaScript Function",SOFTPAGE:"Soft Page",URL:"URL",CUSTOM:"Custom",NETWORKEVT:"Network Event"},origFuncMap:{},platform:"-1",platformVersion:"-1",pageFullURL:window.location.href,unloadEvtHndlrFlag:!1,profileURL:"",extensionSrcFullPath:"",BASrcFullPath:"",BALocalProfileUpdate:!0,resourceType:{AJAX:"AJAX",HTMLRES:"HTMLRES"},resourceSubType:{SYNC:"SYNC",ASYNC:"ASYNC"},snippetAttrNames:{SCRIPT_ID:{OLD:"BA_AXA",NEW:"ca_eum_ba",EXT_OLD:"BA_AXA_EXT",EXT_NEW:"ca_eum_ba_ext"},PROFILE_URL:"data-profileUrl",TENANT_ID:"data-tenantID",APP_ID:"data-appID",APP_KEY:"data-appKey",APP_VERSION:"data-appVersion",APP_USE_AXAAPP_NAME:"data-use-axa-appname",SRC:"src",RESPONSE_BT:"x-apm-ba-response-bt",LOCAL_PROFILE_UPDATE:"data-profile-update"},pageBT:null,timestampNames:{START_TIME:"s",REQUEST_START:"rs",CALLBACK_START_TIME:"cs",CALLBACK_END_TIME:"ce",FIRST_BYTE:"f",LAST_BYTE:"l",EXTERNAL:"ex"},pipeChar:"|",profileInfo:null,semiColonChar:";",colonChar:":",startTime:null,endTime:null,UNDEFINED:"-1",userAgents:{CHROME:{name:"Chrome",ver:30},EDGE:{name:"Edge",ver:12},FIREFOX:{name:"Firefox",ver:30},IE:{name:"IE",ver:9},SAFARI:{name:"Safari",ver:9},UNSUPPORTED:{name:"Unsupported",ver:-1}},isOldXHR:!1,browserFingerprint:null,baStartTime:null,trackerDataKey:"TKR",isGrphqlResp:"isGrphqlResp",pageLoadFlag:"pageLoadFlag",isJQOne:null,isJQ:null,retryInterval:1e3,funcInstrumentMaxRetryCount:10,underscoreChar:"_",dashChar:"-",performanceResourceBuffer:1e3,isPerformanceResourceSupported:!1,RAW_RESOURCE_TIME_DATA:"rawResourceDataKey",isOnUnload:!1,traceSource:"Trace Source",traceSourceBrowser:"Browser Agent",isSynthetic:"Is Synthetic",httpStatusCodeMessages:{0:"error",400:"Bad Request",401:"Unauthorized",402:"Payment Required - Future Use",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Requested Range Not Satisfiable",417:"Expectation Failed",426:"Upgrade Required",500:"Internal Sever Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported"},httpStatusCodes:{NOT_MODIFIED_304:304},EVENT_THRESHOLD:1e3,lastUserMouseDown:0,retryPayloadsMap:{},MINIMUM_RETRY_DELAY:5e3,isCookieEnabled:!1,isSyntheticData:!1,urlToPerformanceListMap:{},currentPerfObjectCount:0,MAX_PERF_OBJECT_CACHE_LIMIT:500,XML_HTTP_REQUEST_PERF_RES_TYPE:"xmlhttprequest",REQUEST_START_PROP_NAME:"requestStart",PERF_OBJ_CORR_MAX_ALLOWED_SPREAD:1500,lastCustomSPARouteName:"",lastCustomSPARouteTime:0,MAX_TIME_BETWEEN_SAME_CUSTOM_ROUTE:12e4,supportedSPARouteTagNames:{"md-tab":!0,"md-tab-item":!0},lastEventTime:0,sessionTimeoutLowerLimit:6e4,lastCorBrowserGUIDsUsed:null,fetchHeaderData:[],fetchReqUrl:[],selfMonPerformance:{baloadinit:{totalTimeMS:0},baunload:{totalTimeMS:0},ajax:{numberOfAjax:0,totalTimeMS:0,avgTimePerAjaxMS:0},jquery:{numberOfJQ:0,totalTimeMS:0,avgTimePerJQMS:0},resource:{numberOfRes:0,totalTimeMS:0,avgTimePerResMS:0},harvestpayload:{minTimeMS:0,maxTimeMS:0,totalTimeMS:0,avgTimeMS:0,numberOfHarvestCycles:0},payload:{startTime:0,lastTime:0,numberOfPayloads:0,totalSizeBytes:0,minSizeBytes:0,maxSizeBytes:0,avgSizeBytes:0,totalNetworkTimeMS:0,avgNetworkTimeMS:0,bytesPerSecond:0}}},BrowserAgent.logger={logPrefix:" [CA Browser Agent]: ",logLevelPrefix:{DEBUG:" [DEBUG] ",ERROR:" [ERROR] ",INFO:" [INFO] ",WARN:" [WARN] "},isOk:function(){return window.console&&"object"==typeof window.console&&(!BrowserAgent.globals.configs||!0===BrowserAgent.globals.configs.BROWSERLOGGINGENABLED)},log:function(e,r){BrowserAgent.logger.isOk()&&window.console.log(new Date+BrowserAgent.logger.logPrefix+e+r)},debug:function(e){BrowserAgent.logger.log(BrowserAgent.logger.logLevelPrefix.DEBUG,e)},error:function(e){BrowserAgent.logger.log(BrowserAgent.logger.logLevelPrefix.ERROR,e)},info:function(e){BrowserAgent.logger.log(BrowserAgent.logger.logLevelPrefix.INFO,e)},warn:function(e){BrowserAgent.logger.log(BrowserAgent.logger.logLevelPrefix.WARN,e)}},BrowserAgent.Set=function(e){this.backingSet={},this.CONST_VALUE=1,this.size=0,e>0?(this.itemOrderArray=[],this.maxAllowedSize=e):(this.itemOrderArray=null,this.maxAllowedSize=0),this._removeFromBackingSet=function(e){this.hasItem(e)&&(this.size-=1),delete this.backingSet[e]}},BrowserAgent.Set.prototype.addItem=function(e){this.hasItem(e)||(this.size+=1),this.backingSet[e]=this.CONST_VALUE,this.itemOrderArray&&this.itemOrderArray.push(e),this.maxAllowedSize>0&&this.size>this.maxAllowedSize&&this._removeFromBackingSet(this.itemOrderArray.shift()),this.itemOrderArray&&this.itemOrderArray.length!==this.size&&BrowserAgent.logger.warn("BrowserAgent.Set.prototype.addItem: Discrepancy detected: this.itemOrderArray = "+this.itemOrderArray+", this.size = "+this.size)},BrowserAgent.Set.prototype.removeItem=function(e){this._removeFromBackingSet(e);for(var r=0;this.itemOrderArray&&r<this.itemOrderArray.length;r++)if(this.itemOrderArray[r]===e){this.itemOrderArray.splice(r,1);break}this.itemOrderArray&&this.itemOrderArray.length!==this.size&&BrowserAgent.logger.warn("BrowserAgent.Set.prototype.removeItem: Discrepancy detected: this.itemOrderArray = "+this.itemOrderArray+", this.size = "+this.size)},BrowserAgent.Set.prototype.hasItem=function(e){var r=this.backingSet[e];return void 0!==r&&null!==r&&r===this.CONST_VALUE},BrowserAgent.Set.prototype.getAll=function(){var e=[];for(var r in this.backingSet)e.push(r);return e},BrowserAgent.Set.prototype.isEmpty=function(){return 0===this.size},BrowserAgent.browserUtils={UUIDPattern:"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx",UUIDChar:"x",XHRToSendMetrics:null,init:function(){BrowserAgent.globals.configs.GEOENABLED&&this.getGeoLocation(),BrowserAgent.globals.browserFingerprint=this.getBrowserFingerprint(),BrowserAgent.globals.currSession=this.getSession()},copyObj:function(e,r){if(!e||"object"!=typeof e)return BrowserAgent.logger.warn("copyObj: Invalid parameters"),null;var t,s={},o=BrowserAgent.jsonStringify(e);if(!o||"{}"===o||r){var n=[];for(n.push([null,e,s]);n.length>0;){var a=n.shift();if(a[1]&&"object"==typeof a[1])if(a[0]){a[2][a[0]]={};for(t in a[1])n.push([t,a[1][t],a[2][a[0]]])}else for(t in a[1])n.push([t,a[1][t],a[2]]);else a[0]?a[2][a[0]]=a[1]:a[2]=a[1]}}else s=e;return s},includes:function(e,r){"use strict";return"number"!=typeof r&&(r=0),!(r+e.length>this.length)&&-1!==this.indexOf(e,r)},getBrowserInfo:function(e){BrowserAgent.logger.warn("BrowserAgent.main: User Agent ["+e+"]");var r=-1;return e&&"string"==typeof e?/opera|opr/i.test(e)?{name:BrowserAgent.globals.userAgents.UNSUPPORTED.name,ver:BrowserAgent.globals.userAgents.UNSUPPORTED.ver,isSupported:!1}:/edge/i.test(e)&&(r=this.getMajorVersion(e,/(?:edge)\/(\d+(\.\d+)?)/i))>=BrowserAgent.globals.userAgents.EDGE.ver?{name:BrowserAgent.globals.userAgents.EDGE.name,ver:r,isSupported:!0}:/msie|trident/i.test(e)&&(r=this.getMajorVersion(e,/(?:msie |rv:)(\d+(\.\d+)?)/i))>=BrowserAgent.globals.userAgents.IE.ver?{name:BrowserAgent.globals.userAgents.IE.name,ver:r,isSupported:!0}:/chrome|crios|crmo/i.test(e)&&(r=this.getMajorVersion(e,/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i))>=BrowserAgent.globals.userAgents.CHROME.ver?{name:BrowserAgent.globals.userAgents.CHROME.name,ver:r,isSupported:!0}:/firefox|iceweasel/i.test(e)&&(r=this.getMajorVersion(e,/(?:firefox|iceweasel)[ /](\d+(\.\d+)?)/i))>=BrowserAgent.globals.userAgents.FIREFOX.ver?{name:BrowserAgent.globals.userAgents.FIREFOX.name,ver:r,isSupported:!0}:/safari/i.test(e)&&(r=this.getMajorVersion(e,/version\/(\d+(\.\d+)?)/i))>=BrowserAgent.globals.userAgents.SAFARI.ver?{name:BrowserAgent.globals.userAgents.SAFARI.name,ver:r,isSupported:!0}:BrowserAgent.browserUtils.isiOSWebViewAgent(e)&&(r=this.getiOSUserAgentVersion(e))>=BrowserAgent.globals.userAgents.SAFARI.ver?{name:BrowserAgent.globals.userAgents.SAFARI.name,ver:r,isSupported:!0}:{name:BrowserAgent.globals.userAgents.UNSUPPORTED.name,ver:BrowserAgent.globals.userAgents.UNSUPPORTED.ver,isSupported:!1}:{name:BrowserAgent.globals.userAgents.UNSUPPORTED.name,ver:BrowserAgent.globals.userAgents.UNSUPPORTED.ver,isSupported:!1}},getMajorVersion:function(e,r){var t=e.match(r);if(t&&t.length>1){var s=t[1].split(".");if(s&&s.length>0)return parseInt(s[0])}return 0},isiOSWebViewAgent:function(e){return!(!e||"string"!=typeof e)&&!(!/iPhone; CPU|iPad; CPU|Macintosh/i.test(e)||/Safari/i.test(e))},getiOSUserAgentVersion:function(e){var r=/\d\w*_\w*\b/g,t=e.match(r);if(t&&t.length>0){var s=t[0].split("_");if(s&&s.length>0)return parseInt(s[0])}return 0},getiOSUserAgent:function(e){var r=BrowserAgent.browserUtils.getiOSUserAgentVersion(e);return e+" Version/"+r+" Safari/"+r},generateUUID:function(){var e=BrowserAgentBootstrap.origFuncMap.timeNow();return BrowserAgent.browserUtils.UUIDPattern.replace(/[xy]/g,function(r){var t=(e+16*Math.random())%16|0;return e=Math.floor(e/16),(r==BrowserAgent.browserUtils.UUIDChar?t:3&t|8).toString(16)})},getBrowserFingerprint:function(){var e=BrowserAgent.cookieUtils.getRawCookie(BrowserAgent.cookieUtils.BAFINGERPRINT);if(e)return BrowserAgent.logger.info("getBrowserFingerprint: Browser Fingerprint already exists via cookie"),BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.LOCAL,BrowserAgent.storageUtils.storageKeys.BAFINGERPRINT,e,!0),e;e=BrowserAgent.storageUtils.getFromStorage(BrowserAgent.storageUtils.storageTypes.LOCAL,BrowserAgent.storageUtils.storageKeys.BAFINGERPRINT);var r=BrowserAgent.browserUtils.getDomainForCookie();return e?(BrowserAgent.logger.info("getBrowserFingerprint: Browser Fingerprint already exists via local storage"),BrowserAgent.cookieUtils.setRawCookie(BrowserAgent.cookieUtils.BAFINGERPRINT,e,null,"/",r),e):(BrowserAgent.logger.info("getBrowserFingerprint: Generating a new Browser Fingerprint..."),e=BrowserAgent.browserUtils.generateUUID(),BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.LOCAL,BrowserAgent.storageUtils.storageKeys.BAFINGERPRINT,e,!0),BrowserAgent.cookieUtils.setRawCookie(BrowserAgent.cookieUtils.BAFINGERPRINT,e,null,"/",r),e)},getDomainForCookie:function(){var e=null,r=window.location.hostname.split(BrowserAgent.globals.dotChar);return r&&r.length>=2&&(e=r[r.length-2]+BrowserAgent.globals.dotChar+r[r.length-1],null===BrowserAgent.browserUtils.convertToNum(r[r.length-2])&&null===BrowserAgent.browserUtils.convertToNum(r[r.length-1])||(e=null)),e},getSession:function(){var e,r=BrowserAgent.storageUtils.getFromStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BASESSION_ID);if(r){if(BrowserAgent.logger.info("getSession: Browser Session ID already exists."),!BrowserAgent.browserUtils.isSameSession(BrowserAgent.globals.baStartTime))return BrowserAgent.browserUtils.getNewSession(BrowserAgent.globals.baStartTime);var t={};t.id=r,t.isNewSession=!1,null!==(e=BrowserAgent.browserUtils.convertToNum(BrowserAgent.storageUtils.getFromStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BASESSION_STARTTIME)))&&(t.startTime=e),BrowserAgent.globals.sessionToChunkMap[r]={};var s=BrowserAgent.browserUtils.convertToNum(BrowserAgent.storageUtils.getFromStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.CHUNK_SEQ));return s=null!==s?s:0,BrowserAgent.globals.sessionToChunkMap[r].ch=s,BrowserAgent.globals.sessionToChunkMap[r].fch=s<=0,BrowserAgent.globals.sessionToChunkMap[r].lch=!1,t}return BrowserAgent.browserUtils.getNewSession(BrowserAgent.globals.baStartTime)},getNewSession:function(e){BrowserAgent.logger.info("getNewSession: Generating a new Session ID...");var r=BrowserAgent.browserUtils.generateUUID();return BrowserAgent.browserUtils.updateSessionInfo(r,e,0,!0),BrowserAgent.globals.sessionToChunkMap[r]={ch:0,fch:!0,lch:!1},"undefined"!=typeof BrowserAgentExtension&&BrowserAgentExtension.internal.clearAllTrackers(),{id:r,startTime:e,isNewSession:!0}},updateSessionInfo:function(e,r,t,s){BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BASESSION_ID,e,s),BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BASESSION_STARTTIME,r,s),BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BALASTEVENT_TIME,r,s),BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.CHUNK_SEQ,t,s)},isSameSession:function(e){if("number"!=typeof e||isNaN(e))return BrowserAgent.logger.error("isSameSession: Cannot determine session truth as event time is NaN."),!0;var r=BrowserAgent.browserUtils.convertToNum(BrowserAgent.storageUtils.getFromStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BALASTEVENT_TIME));return!(!r||e-r>=BrowserAgent.globals.configs.SESSIONTIMEOUT)||(BrowserAgent.logger.info("isSameSession: Session timed out due to inactivity."),!1)},hasCustomGeoLocation:function(){return null!==BrowserAgent.storageUtils.getFromStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.GEOCUSTOM)},isiOSMobileAgent:function(e){return!(!e||"string"!=typeof e)&&!(!/iPhone|iPad/i.test(e)||!/Mobile/i.test(e)||/Safari/i.test(e))},getGeoLocation:function(){if(!BrowserAgent.browserUtils.hasCustomGeoLocation()){if(!navigator||!navigator.geolocation||BrowserAgent.browserUtils.isiOSMobileAgent(navigator.userAgent))return BrowserAgent.logger.warn("getGeoLocation: Geolocation is not supported in this browser."),BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.GEOLAT,BrowserAgent.globals.geoConstants.ERROR,!0),void BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.GEOLONG,BrowserAgent.globals.geoConstants.ERROR,!0);var e=BrowserAgent.storageUtils.getFromStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.GEOLAT),r=BrowserAgent.storageUtils.getFromStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.GEOLONG);if(null===e||null===r){var t={timeout:BrowserAgent.globals.configs.GEOTIMEOUT,maximumAge:BrowserAgent.globals.configs.GEOMAXIMUMAGE,enableHighAccuracy:BrowserAgent.globals.configs.GEOHIGHACCURACYENABLED};BrowserAgent.logger.info("getGeoLocation: Attempting to calculate geo location"),navigator.geolocation.getCurrentPosition(this.geoLocationFound,this.geoLocationNotFound,t),setTimeout(function(){null===BrowserAgent.storageUtils.getFromStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.GEOLAT)&&(BrowserAgent.logger.warn("getGeoLocation: Never received a response for geo-location. Setting co-ordinates to "+BrowserAgent.globals.geoConstants.DENIED+","+BrowserAgent.globals.geoConstants.DENIED),BrowserAgent.globals.geo.lat=BrowserAgent.globals.geoConstants.DENIED,BrowserAgent.globals.geo.lon=BrowserAgent.globals.geoConstants.DENIED,BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.GEOLAT,BrowserAgent.globals.geoConstants.DENIED,!0),BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.GEOLONG,BrowserAgent.globals.geoConstants.DENIED,!0))},parseInt(BrowserAgent.globals.configs.GEOTIMEOUT)+5e3)}else BrowserAgent.globals.geo.lat=Number(e),BrowserAgent.globals.geo.lon=Number(r)}},geoLocationFound:function(e){BrowserAgent.browserUtils.hasCustomGeoLocation()||(BrowserAgent.globals.geo.lat=e.coords.latitude,BrowserAgent.globals.geo.lon=e.coords.longitude,BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.GEOLAT,BrowserAgent.globals.geo.lat,!0),BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.GEOLONG,BrowserAgent.globals.geo.lon,!0))},geoLocationNotFound:function(e){if(!BrowserAgent.browserUtils.hasCustomGeoLocation()){var r=!1;switch(e.code){case e.PERMISSION_DENIED:BrowserAgent.logger.warn("geoLocationNotFound: Browser indicates that user denied the request for geo-location."),r=!0;break;case e.POSITION_UNAVAILABLE:BrowserAgent.logger.warn("geoLocationNotFound: Browser's geo-location information is unavailable.");break;case e.TIMEOUT:BrowserAgent.logger.warn("geoLocationNotFound: Browser's request to obtain geo-location timed out.");break;default:BrowserAgent.logger.warn("geoLocationNotFound: An unknown error occurred while browser attempted geo-location.")}r?(BrowserAgent.globals.geo.lat=BrowserAgent.globals.geoConstants.DENIED,BrowserAgent.globals.geo.lon=BrowserAgent.globals.geoConstants.DENIED):(BrowserAgent.globals.geo.lat=BrowserAgent.globals.geoConstants.ERROR,BrowserAgent.globals.geo.lon=BrowserAgent.globals.geoConstants.ERROR),BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.GEOLAT,BrowserAgent.globals.geo.lat,!0),BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.GEOLONG,BrowserAgent.globals.geo.lon,!0)}},convertToNum:function(e){if("Number"===BrowserAgent.browserUtils.getObjType(e)||null===e)return e;var r=Number(e);return isNaN(r)?null:r},getObjType:function(e){var r=typeof e;if("object"!=typeof e)return r.charAt(0).toUpperCase()+r.slice(1);try{if("string"!=typeof(r=Object.prototype.toString.call(e).slice(8,-1))||""===r)return"Object"}catch(e){BrowserAgent.logger.error("getObjType: "+e.message),r=null}return r},cloneTrackerData:function(){var e=[],r=BrowserAgentBootstrap.origFuncMap.jsonParse(BrowserAgent.storageUtils.getFromStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BATRKR));if(!r)return e;for(var t in r)BrowserAgent.jsonStringify(r[t])!==BrowserAgent.globals.emptyObjStr&&e.push(r[t]);return e},getXHRforBAMetrics:function(){BrowserAgentBootstrap.origFuncMap&&BrowserAgentBootstrap.origFuncMap.XHR&&BrowserAgentBootstrap.origFuncMap.XHROpen&&BrowserAgentBootstrap.origFuncMap.XHRSend?(BrowserAgent.browserUtils.XHRToSendMetrics=new BrowserAgentBootstrap.origFuncMap.XHR,BrowserAgent.browserUtils.XHRToSendMetrics.open=BrowserAgentBootstrap.origFuncMap.XHROpen,BrowserAgent.browserUtils.XHRToSendMetrics.send=BrowserAgentBootstrap.origFuncMap.XHRSend):BrowserAgent.browserUtils.XHRToSendMetrics=new XMLHttpRequest},replaceAll:function(e,r,t){return"string"!=typeof e||"string"!=typeof r||"string"!=typeof t?(BrowserAgent.logger.error("replaceAll: Invalid input"),null):e.replace(new RegExp(r,"g"),t)},parseURL:function(e){if("string"!=typeof e||e.length<1)return BrowserAgent.logger.warn("parseURL: Not a valid URL. Skipping parse..."),null;var r=document.createElement("a");r.href=e;var t=r.port;0===t.length&&(t=80,0===r.protocol.indexOf("https")&&(t=443));var s,o=r.pathname;return o.charAt(0)!==BrowserAgent.globals.forwardSlashChar&&(o=BrowserAgent.globals.forwardSlashChar+o),-1!==(s=o.indexOf(BrowserAgent.globals.semiColonChar))&&(o=o.substring(0,s)),{hostname:decodeURIComponent(r.hostname),port:t,pathname:decodeURIComponent(o),hash:decodeURIComponent(r.hash),href:r.href,search:decodeURIComponent(r.search)}},getFullURL:function(e){if("string"!=typeof e||e.length<1)return BrowserAgent.logger.warn("getFullURL: Not a valid URL. Skipping parse..."),null;var r=document.createElement("a");return r.href=e,r.href},isJQPresent:function(){"undefined"!=typeof jQuery?(BrowserAgent.globals.isJQ=!0,null!==jQuery.fn.jquery.match(/^1\.\d+.*/)?(BrowserAgent.globals.isJQOne=!0,BrowserAgent.logger.info("isJQOnePresent: jQuery 1.x detected.")):BrowserAgent.globals.isJQOne=!1):(BrowserAgent.globals.isJQ=!1,BrowserAgent.globals.isJQOne=!1)},shouldPopulateMetrics:function(){return!BrowserAgent.globals.isOnUnload||BrowserAgent.globals.isOnUnload&&navigator&&navigator.sendBeacon},getDefaultHttpStatusCodeMessage:function(e){return"number"==typeof e&&BrowserAgent.globals.httpStatusCodeMessages[e]?BrowserAgent.globals.httpStatusCodeMessages[e]:(BrowserAgent.logger.warn("getDefaultHttpStatusCodeMessage: HTTP status code ["+e+"] does not comply to RFC, returning generic error message."),BrowserAgent.globals.httpStatusCodeMessages[0])},binarySearchByPropCompare:function(e,r,t){for(var s,o=0,n=e.length-1;o<=n;){var a=e[s=Math.floor((o+n)/2)],g=BrowserAgent.browserUtils.binarySearchCompareFunction(a,r,t);if(g<0)o=s+1;else{if(!(g>0))return s;n=s-1}}return-(o+1)},binarySearchCompareFunction:function(e,r,t){return null===t?e-r:e[t]-r},binaryInsert:function(e,r,t){var s;s=null===t?r:r[t];var o,n=BrowserAgent.browserUtils.binarySearchByPropCompare(e,s,t);n>=0?o=n:n<0&&(0===(n+=1)?o=0:n<0&&(o=-1*n)),e.splice(o,0,r)},getLastSegmentFromPathname:function(e){var r,t="",s=!1;return"string"!=typeof e||e.length<1?t:(e[e.length-1]===BrowserAgent.globals.forwardSlashChar&&(s=!0,e=e.slice(0,-1)),(r=e.split(BrowserAgent.globals.forwardSlashChar)).length>0&&(t=r[r.length-1]),s?t+BrowserAgent.globals.forwardSlashChar:t)},setCustomPerformanceNow:function(){if("performance"in window==!1&&(window.performance={}),Date.now=Date.now||function(){return(new Date).getTime()},"now"in window.performance==!1){var e=Date.now();performance.timing&&performance.timing.navigationStart&&(e=performance.timing.navigationStart),window.performance.now=function(){return Date.now()-e}}}},BrowserAgent.configUtils={configNames:{BROWSERLOGGINGENABLED:"browserLoggingEnabled",AJAXMETRICSENABLED:"ajaxMetricsEnabled",AJAXMETRICSTHRESHOLD:"ajaxMetricsThreshold",BROWSERAGENTENABLED:"browserAgentEnabled",COLLECTORURL:"collectorUrl",GEOENABLED:"geoEnabled",GEOHIGHACCURACYENABLED:"geoHighAccuracyEnabled",GEOMAXIMUMAGE:"geoMaximumAge",GEOTIMEOUT:"geoTimeout",JSERRORSENABLED:"jsErrorsEnabled",JSFUNCTIONMETRICSENABLED:"jsFunctionMetricsEnabled",JSFUNCTIONMETRICSTHRESHOLD:"jsFunctionMetricsThreshold",METRICFREQUENCY:"metricFrequency",PAGELOADMETRICSENABLED:"pageLoadMetricsEnabled",PAGELOADMETRICSTHRESHOLD:"pageLoadMetricsThreshold",SESSIONTIMEOUT:"sessionTimeout",URLEXCLUDELIST:"urlExcludeList",URLINCLUDELIST:"urlIncludeList",URLMETRICOFF:"urlMetricOff",DOMCHANGETIMEOUT:"domChangeTimeout",DOMCHANGEINTERVAL:"domChangePollingInterval",COOKIECAPTUREENABLED:"cookieCaptureEnabled",ERROREXCLUDELIST:"errorExcludeList",ERRORINCLUDELIST:"errorIncludeList",ERRORCLAMPPERINTERVAL:"errorClampPerInterval",EVENTCOLLECTIONCLAMPPERINTERVAL:"eventCollectionClampPerInterval",EVENTDISPATCHCLAMPPERINTERVAL:"eventDispatchClampPerInterval",RESOURCEMETRICSENABLED:"resourceMetricsEnabled",RESOURCEBUFFERSIZE:"resourceBufferSize",RESOURCEMETRICSTHRESHOLD:"resourceMetricsThreshold",METRICPAYLOADSENDTRYCOUNT:"metricPayloadSendTryCount",DEBUGGING_ENABLED:"debuggingEnabled",ALLOW_COOKIES:"allowCookies",ENABLE_TRUNCATE_URL:"enableTruncateURL",TRUNCATE_URL_VALUE:"truncateURLValue"},defaults:{BROWSERLOGGINGENABLED:!1,AJAXMETRICSENABLED:!0,AJAXMETRICSTHRESHOLD:100,BROWSERAGENTENABLED:!1,COLLECTORURL:"",GEOENABLED:!1,GEOHIGHACCURACYENABLED:!1,GEOMAXIMUMAGE:1e4,GEOTIMEOUT:5e3,JSERRORSENABLED:!0,JSFUNCTIONMETRICSENABLED:!1,JSFUNCTIONMETRICSTHRESHOLD:100,METRICFREQUENCY:3750,PAGELOADMETRICSENABLED:!0,PAGELOADMETRICSTHRESHOLD:100,SESSIONTIMEOUT:36e5,URLEXCLUDELIST:[],URLINCLUDELIST:[],URLMETRICOFF:!1,DOMCHANGETIMEOUT:1e4,DOMCHANGEINTERVAL:100,COOKIECAPTUREENABLED:!1,ERROREXCLUDELIST:[],ERRORINCLUDELIST:[],ERRORCLAMPPERINTERVAL:100,EVENTCOLLECTIONCLAMPPERINTERVAL:1e4,EVENTDISPATCHCLAMPPERINTERVAL:2e4,RESOURCEMETRICSENABLED:!0,RESOURCEBUFFERSIZE:2e3,RESOURCEMETRICSTHRESHOLD:100,METRICPAYLOADSENDTRYCOUNT:3,DEBUGGING_ENABLED:!1,ALLOW_COOKIES:!0,ENABLE_TRUNCATE_URL:!1,TRUNCATE_URL_VALUE:"!ut"},processAppProfile:function(e){var r="processAppProfile: ";if(!e||!e.baAttributes)return BrowserAgent.logger.error(r+"Invalid app profile."),!1;var t=" is out of range. Defaulting to ";for(var s in BrowserAgent.configUtils.configNames){var o=e.baAttributes[BrowserAgent.configUtils.configNames[s]],n=BrowserAgent.configUtils.defaults[s],a=BrowserAgent.browserUtils.getObjType(o);a===BrowserAgent.browserUtils.getObjType(n)&&("Number"!==a||o>=0)?BrowserAgent.globals.configs[s]=o.valueOf():(BrowserAgent.logger.info(r+BrowserAgent.configUtils.configNames[s]+" is not provided or invalid. Defaulting to "+BrowserAgent.jsonStringify(n)),BrowserAgent.globals.configs[s]=n)}for(var g=0;g<BrowserAgent.globals.configs.URLINCLUDELIST.length;g++)try{new RegExp(BrowserAgent.globals.configs.URLINCLUDELIST[g])}catch(e){BrowserAgent.logger.warn(r+BrowserAgent.configUtils.configNames.URLINCLUDELIST+" has invalid RegEx entries. Defaulting to: "+BrowserAgent.jsonStringify(BrowserAgent.configUtils.defaults.URLINCLUDELIST)),BrowserAgent.globals.configs.URLINCLUDELIST=BrowserAgent.configUtils.defaults.URLINCLUDELIST;break}for(g=0;g<BrowserAgent.globals.configs.URLEXCLUDELIST.length;g++)try{new RegExp(BrowserAgent.globals.configs.URLEXCLUDELIST[g])}catch(e){BrowserAgent.logger.warn(r+BrowserAgent.configUtils.configNames.URLEXCLUDELIST+" has invalid RegEx entries. Defaulting to: "+BrowserAgent.jsonStringify(BrowserAgent.configUtils.defaults.URLEXCLUDELIST)),BrowserAgent.globals.configs.URLEXCLUDELIST=BrowserAgent.configUtils.defaults.URLEXCLUDELIST;break}for(g=0;g<BrowserAgent.globals.configs.ERRORINCLUDELIST.length;g++){var i=BrowserAgent.globals.configs.ERRORINCLUDELIST[g];if(!i.hasOwnProperty("url")||!i.hasOwnProperty("msg")){BrowserAgent.logger.warn(r+BrowserAgent.configUtils.configNames.ERRORINCLUDELIST+' list must include url and msg, in format: \n[ {"url": "RegEx", "msg" :"RegEx" }, { "url": "RegEx", "msg": "RegEx"} ] \ndefaulting to: '+BrowserAgent.jsonStringify(BrowserAgent.configUtils.defaults.ERRORINCLUDELIST)),BrowserAgent.globals.configs.ERRORINCLUDELIST=BrowserAgent.configUtils.defaults.ERRORINCLUDELIST;break}try{new RegExp(i.url),new RegExp(i.msg)}catch(e){BrowserAgent.logger.warn(r+BrowserAgent.configUtils.configNames.ERRORINCLUDELIST+" has invalid RegEx entries. Defaulting to: "+BrowserAgent.jsonStringify(BrowserAgent.configUtils.defaults.ERRORINCLUDELIST)),BrowserAgent.globals.configs.ERRORINCLUDELIST=BrowserAgent.configUtils.defaults.ERRORINCLUDELIST;break}}for(g=0;g<BrowserAgent.globals.configs.ERROREXCLUDELIST.length;g++){var l=BrowserAgent.globals.configs.ERROREXCLUDELIST[g];if(!l.hasOwnProperty("url")||!l.hasOwnProperty("msg")){BrowserAgent.logger.warn(r+BrowserAgent.configUtils.configNames.ERROREXCLUDELIST+' list must include url and msg, in format: \n[ {"url": "RegEx", "msg" :"RegEx" }, { "url": "RegEx", "msg": "RegEx"} ] \ndefaulting to: '+BrowserAgent.jsonStringify(BrowserAgent.configUtils.defaults.ERROREXCLUDELIST)),BrowserAgent.globals.configs.ERROREXCLUDELIST=BrowserAgent.configUtils.defaults.ERROREXCLUDELIST;break}try{new RegExp(l.url),new RegExp(l.msg)}catch(e){BrowserAgent.logger.warn(r+BrowserAgent.configUtils.configNames.ERROREXCLUDELIST+" has invalid RegEx entries. Defaulting to: "+BrowserAgent.jsonStringify(BrowserAgent.configUtils.defaults.ERROREXCLUDELIST)),BrowserAgent.globals.configs.ERROREXCLUDELIST=BrowserAgent.configUtils.defaults.ERROREXCLUDELIST;break}}return BrowserAgent.globals.configs.METRICFREQUENCY>6e4&&(BrowserAgent.logger.warn(r+BrowserAgent.configUtils.configNames.METRICFREQUENCY+t+BrowserAgent.configUtils.defaults.METRICFREQUENCY),BrowserAgent.globals.configs.METRICFREQUENCY=BrowserAgent.configUtils.defaults.METRICFREQUENCY),BrowserAgent.globals.configs.ERRORCLAMPPERINTERVAL<5&&(BrowserAgent.logger.warn(r+BrowserAgent.configUtils.configNames.ERRORCLAMPPERINTERVAL+t+BrowserAgent.configUtils.defaults.ERRORCLAMPPERINTERVAL),BrowserAgent.globals.configs.ERRORCLAMPPERINTERVAL=BrowserAgent.configUtils.defaults.ERRORCLAMPPERINTERVAL),BrowserAgent.globals.configs.EVENTCOLLECTIONCLAMPPERINTERVAL<BrowserAgent.globals.configs.ERRORCLAMPPERINTERVAL&&(BrowserAgent.logger.warn(r+BrowserAgent.configUtils.configNames.EVENTCOLLECTIONCLAMPPERINTERVAL+t+BrowserAgent.configUtils.defaults.EVENTCOLLECTIONCLAMPPERINTERVAL),BrowserAgent.globals.configs.EVENTCOLLECTIONCLAMPPERINTERVAL=BrowserAgent.configUtils.defaults.EVENTCOLLECTIONCLAMPPERINTERVAL),BrowserAgent.globals.configs.EVENTDISPATCHCLAMPPERINTERVAL<BrowserAgent.globals.configs.EVENTCOLLECTIONCLAMPPERINTERVAL&&(BrowserAgent.logger.warn(r+BrowserAgent.configUtils.configNames.EVENTDISPATCHCLAMPPERINTERVAL+t+BrowserAgent.configUtils.defaults.EVENTDISPATCHCLAMPPERINTERVAL),BrowserAgent.globals.configs.EVENTDISPATCHCLAMPPERINTERVAL=BrowserAgent.configUtils.defaults.EVENTDISPATCHCLAMPPERINTERVAL),(BrowserAgent.globals.configs.DOMCHANGEINTERVAL<50||BrowserAgent.globals.configs.DOMCHANGEINTERVAL>1e3)&&(BrowserAgent.logger.warn(r+BrowserAgent.configUtils.configNames.DOMCHANGEINTERVAL+t+BrowserAgent.configUtils.defaults.DOMCHANGEINTERVAL),BrowserAgent.globals.configs.DOMCHANGEINTERVAL=BrowserAgent.configUtils.defaults.DOMCHANGEINTERVAL),(BrowserAgent.globals.configs.DOMCHANGETIMEOUT<200||BrowserAgent.globals.configs.DOMCHANGETIMEOUT>15e3)&&(BrowserAgent.logger.warn(r+BrowserAgent.configUtils.configNames.DOMCHANGETIMEOUT+t+BrowserAgent.configUtils.defaults.DOMCHANGETIMEOUT),BrowserAgent.globals.configs.DOMCHANGETIMEOUT=BrowserAgent.configUtils.defaults.DOMCHANGETIMEOUT),BrowserAgent.globals.configs.DOMCHANGETIMEOUT<=BrowserAgent.globals.configs.DOMCHANGEINTERVAL&&(BrowserAgent.logger.warn(r+BrowserAgent.configUtils.configNames.DOMCHANGETIMEOUT+" cannot be less than or equal to "+BrowserAgent.configUtils.configNames.DOMCHANGEINTERVAL+". Using default values."),BrowserAgent.globals.configs.DOMCHANGEINTERVAL=BrowserAgent.configUtils.defaults.DOMCHANGEINTERVAL,BrowserAgent.globals.configs.DOMCHANGETIMEOUT=BrowserAgent.configUtils.defaults.DOMCHANGETIMEOUT),(BrowserAgent.globals.configs.METRICPAYLOADSENDTRYCOUNT<1||BrowserAgent.globals.configs.METRICPAYLOADSENDTRYCOUNT>10)&&(BrowserAgent.logger.warn(r+BrowserAgent.configUtils.configNames.METRICPAYLOADSENDTRYCOUNT+" cannot be less than 1 or greater than 10 "),BrowserAgent.logger.warn(r+BrowserAgent.configUtils.configNames.METRICPAYLOADSENDTRYCOUNT+t+BrowserAgent.configUtils.defaults.METRICPAYLOADSENDTRYCOUNT),BrowserAgent.globals.configs.METRICPAYLOADSENDTRYCOUNT=BrowserAgent.configUtils.defaults.METRICPAYLOADSENDTRYCOUNT),BrowserAgent.globals.configs.SESSIONTIMEOUT<BrowserAgent.globals.sessionTimeoutLowerLimit&&(BrowserAgent.logger.warn(r+BrowserAgent.configUtils.configNames.SESSIONTIMEOUT+" cannot be less than 1 min "),BrowserAgent.logger.warn(r+BrowserAgent.configUtils.configNames.SESSIONTIMEOUT+t+BrowserAgent.globals.sessionTimeoutLowerLimit+"ms"),BrowserAgent.globals.configs.SESSIONTIMEOUT=BrowserAgent.globals.sessionTimeoutLowerLimit),BrowserAgent.globals.profileInfo=BrowserAgent.configUtils.extractProfileInfo(e),!0},getAppProfile:function(e){BrowserAgent.browserUtils.getXHRforBAMetrics();var r=BrowserAgent.browserUtils.XHRToSendMetrics;r&&(r.open("GET",e,!0),r.onreadystatechange=function(){if(this.readyState===this.DONE&&200===this.status){var e=null;try{e=BrowserAgentBootstrap.origFuncMap.jsonParse(r.responseText)}catch(e){return BrowserAgent.logger.error("getAppProfile: Invalid app profile - "+e.message+". Disabling Browser Agent..."),void BrowserAgent.configUtils.disableBA()}BrowserAgent.logger.info("getAppProfile: Successfully obtained new app profile."),BrowserAgent.configUtils.updateAppProfile(e)}},r.send())},extractAppInfo:function(){var e=BrowserAgent.globals.hashChar+BrowserAgent.globals.snippetAttrNames.SCRIPT_ID.NEW+BrowserAgent.globals.commaChar+BrowserAgent.globals.hashChar+BrowserAgent.globals.snippetAttrNames.SCRIPT_ID.OLD,r=document.querySelector(e);if(!r)return BrowserAgent.logger.error("extractAppInfo: Snippet is not found. App information could not be extracted."),!1;var t=r.getAttribute(BrowserAgent.globals.snippetAttrNames.PROFILE_URL);"string"==typeof t&&""!==t||(BrowserAgent.logger.error("extractAppInfo: Unable to obtain profile URL."),BrowserAgent.globals.profileURL=""),BrowserAgent.globals.profileURL=t;var s=r.getAttribute(BrowserAgent.globals.snippetAttrNames.APP_ID),o=r.getAttribute(BrowserAgent.globals.snippetAttrNames.APP_KEY),n=r.getAttribute(BrowserAgent.globals.snippetAttrNames.APP_VERSION),a=r.getAttribute(BrowserAgent.globals.snippetAttrNames.APP_USE_AXAAPP_NAME),g=r.getAttribute(BrowserAgent.globals.snippetAttrNames.TENANT_ID),i=r.getAttribute(BrowserAgent.globals.snippetAttrNames.RESPONSE_BT);if("string"!=typeof s||""===s||"string"!=typeof o||""===o||"string"!=typeof g||""===g)return BrowserAgent.logger.error("extractAppInfo: Unable to obtain App specific information."),!1;i&&""!==i&&(BrowserAgent.globals.pageBT=decodeURIComponent(BrowserAgent.browserUtils.replaceAll(i,"\\+","%20")));var l=BrowserAgent.browserUtils.parseURL(r.getAttribute(BrowserAgent.globals.snippetAttrNames.SRC));if(null!==l){BrowserAgent.globals.BASrcFullPath=l.pathname+l.search+l.hash;var A=BrowserAgent.browserUtils.parseURL(t);if(A){BrowserAgent.globals.BALocalProfileUpdate=l.hostname===A.hostname&&l.port===A.port;var B=r.getAttribute(BrowserAgent.globals.snippetAttrNames.LOCAL_PROFILE_UPDATE);"string"==typeof B&&""!==B&&"true"===B||(B=!1),BrowserAgent.globals.BALocalProfileUpdate=B||BrowserAgent.globals.BALocalProfileUpdate}}e=BrowserAgent.globals.hashChar+BrowserAgent.globals.snippetAttrNames.SCRIPT_ID.EXT_NEW+BrowserAgent.globals.commaChar+BrowserAgent.globals.hashChar+BrowserAgent.globals.snippetAttrNames.SCRIPT_ID.EXT_OLD;var w=document.querySelector(e);if(null!==w){var c=w.getAttribute(BrowserAgent.globals.snippetAttrNames.SRC);if(null!==c){var u=BrowserAgent.browserUtils.parseURL(c);BrowserAgent.globals.extensionSrcFullPath=u.pathname+u.search+u.hash}}return BrowserAgent.globals.appInfo={id:s,key:o,tenantId:g,version:n,useAxaAppName:a},!0},updateAppProfile:function(e){var r=BrowserAgent.globals.configs.METRICFREQUENCY,t=BrowserAgent.globals.configs.JSERRORSENABLED,s=BrowserAgent.globals.configs.PAGELOADMETRICSENABLED,o=BrowserAgent.globals.configs.AJAXMETRICSENABLED;if(BrowserAgent.configUtils.processAppProfile(e)){if(!1===BrowserAgent.globals.configs.BROWSERAGENTENABLED)return BrowserAgent.logger.info("updateAppProfile: Browser Agent is DISABLED."),void BrowserAgent.configUtils.disableBA();if("string"!=typeof BrowserAgent.globals.configs.COLLECTORURL||""===BrowserAgent.globals.configs.COLLECTORURL)return BrowserAgent.logger.warn("updateAppProfile: Invalid collector url. Disabling Browser Agent..."),void BrowserAgent.configUtils.disableBA();var n=BrowserAgent.configUtils.isUrlExcluded(window.location.href);BrowserAgent.globals.currPagePtr.isExcluded!==n&&!0===n&&BrowserAgent.logger.info("updateAppProfile: Page ["+window.location.href+"] is configured to be EXCLUDED. Skipping all instrumentation on this page..."),BrowserAgent.globals.currPagePtr.isExcluded=n,s!==BrowserAgent.globals.configs.PAGELOADMETRICSENABLED&&(!0===BrowserAgent.globals.configs.PAGELOADMETRICSENABLED?window.MutationObserver&&window.history&&(BrowserAgent.globals.isSoftPageLoad=!0):BrowserAgent.pageUtils.disableSoftPages()),o!==BrowserAgent.globals.configs.AJAXMETRICSENABLED&&(!1===BrowserAgent.globals.configs.AJAXMETRICSENABLED?(BrowserAgent.funcUtils.deInstrumentFunc("XMLHttpRequest.prototype.open",["BrowserAgent.funcUtils.tracers.xhrOpenPre"],null,!1),BrowserAgent.funcUtils.deInstrumentFunc("XMLHttpRequest.prototype.send",["BrowserAgent.funcUtils.tracers.xhrSendPre"],null,!1),BrowserAgent.funcUtils.deInstrumentFunc("jQuery.ajaxSettings.xhr",[],["BrowserAgent.funcUtils.tracers.jQXHRPost"],!1)):(BrowserAgent.funcUtils.instrumentFunc("XMLHttpRequest.prototype.open",[{name:"BrowserAgent.funcUtils.tracers.xhrOpenPre",func:BrowserAgent.funcUtils.tracers.xhrOpenPre}],null,BrowserAgent.globals.funcInstrumentMaxRetryCount),BrowserAgent.funcUtils.instrumentFunc("XMLHttpRequest.prototype.send",[{name:"BrowserAgent.funcUtils.tracers.xhrSendPre",func:BrowserAgent.funcUtils.tracers.xhrSendPre}],null,BrowserAgent.globals.funcInstrumentMaxRetryCount),BrowserAgent.funcUtils.instrumentFunc("jQuery.ajaxSettings.xhr",null,[{name:"BrowserAgent.funcUtils.tracers.jQXHRPost",func:BrowserAgent.funcUtils.tracers.jQXHRPost}],BrowserAgent.globals.funcInstrumentMaxRetryCount))),t!==BrowserAgent.globals.configs.JSERRORSENABLED&&(!1===BrowserAgent.globals.configs.JSERRORSENABLED?(BrowserAgent.logger.info("updateAppProfile: JS Error Monitoring is DISABLED. Detaching from window.onerror event..."),window.removeEventListener("error",BrowserAgent.errorUtils.captureJSError)):BrowserAgent.errorUtils.init()),!0===BrowserAgent.globals.configs.GEOENABLED?BrowserAgent.browserUtils.getGeoLocation():(BrowserAgent.globals.geo.lat=BrowserAgent.globals.geoConstants.ERROR,BrowserAgent.globals.geo.lon=BrowserAgent.globals.geoConstants.ERROR,delete BrowserAgent.globals.eumJSONShell.clientInfo.geolocation),r!==BrowserAgent.globals.configs.METRICFREQUENCY&&BrowserAgent.globals.harvestIntervalId&&(clearInterval(BrowserAgent.globals.harvestIntervalId),BrowserAgent.globals.harvestIntervalId=setInterval(BrowserAgent.evtUtils.harvestEvts,BrowserAgent.globals.configs.METRICFREQUENCY))}else BrowserAgent.logger.info("updateAppProfile: Using existing app profile.")},extractProfileInfo:function(e){if(!e)return null;var r={},t=!1;return e.profileId&&(r.id=e.profileId,t=!0),e.profileName&&(r.name=e.profileName,t=!0),e.created&&(r.createdAt=e.created,t=!0),e.lastUpdated&&(r.lastUpdatedAt=e.lastUpdated,t=!0),t?r:null},disableBA:function(){BrowserAgent.cookieUtils.clearBAResponseCookies(),BrowserAgent.globals.harvestIntervalId&&(clearInterval(BrowserAgent.globals.harvestIntervalId),BrowserAgent.globals.harvestIntervalId=null),BrowserAgent.globals.pageWithEventsMap={},BrowserAgent.globals.pageBucketsMap={},BrowserAgent.globals.sortedBucketList=[],BrowserAgent.globals.currTTimeEvtPtr=null,BrowserAgent.globals.currPagePtr=null;for(var e in BrowserAgent.globals.retryFuncIdMap)clearTimeout(BrowserAgent.globals.retryFuncIdMap[e]);window.removeEventListener("error",BrowserAgent.errorUtils.captureJSError),window.removeEventListener("beforeunload",BrowserAgent.pageUtils.unloadEventHandler,!0),window.removeEventListener("pagehide",BrowserAgent.pageUtils.unloadEventHandler,!0),document.removeEventListener("mousedown",BrowserAgent.pageUtils.mouseDownHandler,!0),BrowserAgent.pageUtils.disableSoftPages(),BrowserAgent.globals.configs.BROWSERAGENTENABLED=!1,BrowserAgent.globals.configs.JSERRORSENABLED=!1,BrowserAgent.globals.configs.PAGELOADMETRICSENABLED=!1,BrowserAgent.globals.configs.AJAXMETRICSENABLED=!1,BrowserAgent.funcUtils.deInstrumentFunc("XMLHttpRequest.prototype.open"),BrowserAgent.funcUtils.deInstrumentFunc("XMLHttpRequest.prototype.send"),BrowserAgent.funcUtils.deInstrumentFunc("jQuery.ajaxSettings.xhr"),BrowserAgent.globals.configs.JSFUNCTIONMETRICSENABLED=!1,BrowserAgent.globals.configs.GEOENABLED=!1,BrowserAgent.globals.configs.RESOURCEMETRICSENABLED=!1,BrowserAgent.globals.configs.BROWSERLOGGINGENABLED=!1,BrowserAgent.globals.isOnUnload||(BrowserAgent.storageUtils.deleteFromStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BATRKR),BrowserAgent.storageUtils.deleteFromStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BATTPERST),BrowserAgent.storageUtils.deleteFromStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.GEOCUSTOM))},isUrlExcluded:function(e){if("string"!=typeof e||e.length<1)return BrowserAgent.logger.warn("isUrlExcluded: Invalid URL. Skipping URL exclusion check..."),!1;var r=BrowserAgent.globals.configs.URLINCLUDELIST,t=BrowserAgent.globals.configs.URLEXCLUDELIST;return t.length>0&&BrowserAgent.configUtils.isUrlInRegexList(e,t)||r.length>0&&!BrowserAgent.configUtils.isUrlInRegexList(e,r)},isUrlInRegexList:function(e,r){for(var t=0;t<r.length;t++)if(new RegExp(r[t]).test(e))return!0;return!1},isErrorExcluded:function(e,r){if("string"!=typeof e||e.length<1)return BrowserAgent.logger.warn("isErrorExcluded: Invalid URL. Skipping error exclusion check..."),!1;if("string"!=typeof r||r.length<1)return BrowserAgent.logger.warn("isErrorExcluded: Invalid msg. Skipping error exclusion check..."),!1;var t=BrowserAgent.globals.configs.ERRORINCLUDELIST,s=BrowserAgent.globals.configs.ERROREXCLUDELIST;return s.length>0&&BrowserAgent.configUtils.isErrorInRegexList(e,r,s)||t.length>0&&!BrowserAgent.configUtils.isErrorInRegexList(e,r,t)},isErrorInRegexList:function(e,r,t){for(var s=0;s<t.length;s++)if(new RegExp(t[s].url).test(e)&&new RegExp(t[s].msg).test(r))return!0;return!1}},BrowserAgent.storageUtils={storageTypes:{SESSION:0,LOCAL:1},storageKeys:{GEOLAT:"BALat",GEOLONG:"BALong",GEOCUSTOM:"BAGEOCustom",BAFINGERPRINT:"BAFinPrt",BASESSION_ID:"BASSID",BASESSION_STARTTIME:"BASSSTART",BALASTEVENT_TIME:"BALASTEVT",PATHNAME:window.location.pathname,BATRKR:"BATRKR",BATTPERST:"BATTPERST",PAYLOADRETRYLIST:"PAYLOADRETRYLIST",CHUNK_SEQ:"CHUNK_SEQ"},init:function(){try{sessionStorage.setItem("BATEST","test"),sessionStorage.removeItem("BATEST"),localStorage.setItem("BATEST","test"),localStorage.removeItem("BATEST")}catch(e){BrowserAgent.logger.warn("storageUtils.init: Access to browser storage is denied. Browser Agent may exhibit unexpected behavior."),BrowserAgent.globals.isStoragePresent=!1}},putInStorage:function(e,r,t,s){try{switch(r){case BrowserAgent.storageUtils.storageKeys.BALASTEVENT_TIME:BrowserAgent.globals.lastEventTime=t}if(!BrowserAgent.globals.isStoragePresent)return;if("string"!=typeof r||null===t||void 0===t||"boolean"!=typeof s)return void BrowserAgent.logger.warn("putInStorage: Invalid input.");switch(e){case BrowserAgent.storageUtils.storageTypes.SESSION:switch(r){case BrowserAgent.storageUtils.storageKeys.BASESSION_ID:case BrowserAgent.storageUtils.storageKeys.BALASTEVENT_TIME:case BrowserAgent.storageUtils.storageKeys.CHUNK_SEQ:case BrowserAgent.storageUtils.storageKeys.BASESSION_STARTTIME:var o=JSON.parse(sessionStorage.getItem(BrowserAgent.globals.appInfo.key))||{};if(o[r]=t,s||!s&&null===sessionStorage.getItem(BrowserAgent.globals.appInfo.key))return sessionStorage.setItem(BrowserAgent.globals.appInfo.key,JSON.stringify(o))}(s||!s&&null===sessionStorage.getItem(r))&&sessionStorage.setItem(r,t);break;case BrowserAgent.storageUtils.storageTypes.LOCAL:(s||!s&&null===localStorage.getItem(r))&&localStorage.setItem(r,t)}}catch(e){BrowserAgent.logger.error("putInStorage: "+e.message)}},getFromStorage:function(e,r){try{if(!BrowserAgent.globals.isStoragePresent){switch(r){case BrowserAgent.storageUtils.storageKeys.BALASTEVENT_TIME:return BrowserAgent.globals.lastEventTime}return null}if("string"!=typeof r)return BrowserAgent.logger.warn("getFromStorage: Invalid input."),null;switch(e){case BrowserAgent.storageUtils.storageTypes.SESSION:switch(r){case BrowserAgent.storageUtils.storageKeys.BASESSION_ID:case BrowserAgent.storageUtils.storageKeys.BALASTEVENT_TIME:case BrowserAgent.storageUtils.storageKeys.CHUNK_SEQ:case BrowserAgent.storageUtils.storageKeys.BASESSION_STARTTIME:var t=JSON.parse(sessionStorage.getItem(BrowserAgent.globals.appInfo.key));return t?t[r]:sessionStorage.getItem(r)}return sessionStorage.getItem(r);case BrowserAgent.storageUtils.storageTypes.LOCAL:return localStorage.getItem(r);default:return null}}catch(e){return BrowserAgent.logger.error("getFromStorage: "+e.message),null}},deleteFromStorage:function(e,r){try{if(!BrowserAgent.globals.isStoragePresent)return null;if("string"!=typeof r)return BrowserAgent.logger.warn("deleteFromStorage: Invalid input."),null;switch(e){case BrowserAgent.storageUtils.storageTypes.SESSION:switch(r){case BrowserAgent.storageUtils.storageKeys.BASESSION_ID:case BrowserAgent.storageUtils.storageKeys.BALASTEVENT_TIME:case BrowserAgent.storageUtils.storageKeys.CHUNK_SEQ:case BrowserAgent.storageUtils.storageKeys.BASESSION_STARTTIME:var t=JSON.parse(sessionStorage.getItem(BrowserAgent.globals.appInfo.key));return t&&delete t[r]?sessionStorage.setItem(BrowserAgent.globals.appInfo.key,JSON.stringify(t)):sessionStorage.removeItem(r)}return sessionStorage.removeItem(r);case BrowserAgent.storageUtils.storageTypes.LOCAL:return localStorage.removeItem(r);default:return null}}catch(e){return BrowserAgent.logger.error("deleteFromStorage: "+e.message),null}}},BrowserAgent.cookieUtils={cookies:{BTRESP:"x-apm-brtm-response-bt",BTRESPID:"x-apm-brtm-response-bt-id",BTPAGERESP:"x-apm-brtm-response-bt-page",SERVERTIME:"x-apm-brtm-servertime",GAPTIME:"x-apm-brtm-gaptime",PLATFORM:"x-apm-brtm-bt-p",PLATFORMVER:"x-apm-brtm-bt-pv"},cookieKeys:{apmStartTimeChar:"startTime",apmEndTimeChar:"endTime",bsChar:"bs",btChar:"bt",btcChar:"btc",CorBrowsGUIDChar:"CorBrowsGUID",graphqlResp:"isGrpql",geoChar:"g",platformChar:"p",platformVerChar:"pv"},BAFINGERPRINT:"x-apm-ba-BAFinPrt",baCookieRegex:new RegExp("x-apm-brtm-|WMRUMC|x-apm-ba-"),baResponseCookieRegex:new RegExp("x-apm-brtm-response-bt"),init:function(){var e=null;if(BrowserAgent.globals.pageBT)e=BrowserAgent.globals.pageBT;else{var r=BrowserAgent.cookieUtils.cookies.BTPAGERESP,t=BrowserAgent.browserUtils.getLastSegmentFromPathname(window.location.pathname);t&&(r+="-"+encodeURIComponent(t)),(e=BrowserAgent.cookieUtils.getRawCookie(r))||(r=BrowserAgent.cookieUtils.cookies.BTPAGERESP,r+="-"+encodeURIComponent(window.location.pathname),e=BrowserAgent.cookieUtils.getRawCookie(r)),BrowserAgent.cookieUtils.deleteCookie(r,"/",null)}e?BrowserAgent.cookieUtils.updateHPDataObjWithCookieData(BrowserAgent.cookieUtils.tokenizeCookieIntoMap(e,",")):BrowserAgent.logger.warn("cookieUtils.init: Cannot get page bt cookie for url = "+window.location.pathname),BrowserAgent.cookieUtils.deleteCookie(BrowserAgent.cookieUtils.cookies.SERVERTIME,"/",null),BrowserAgent.globals.platform===BrowserAgent.globals.userAgents.IE.name&&BrowserAgent.globals.platformVersion<10&&(BrowserAgent.globals.isOldXHR=!0)},deleteCookie:function(e,r,t){if(e){var s,o,n,a=new RegExp(e),g=null;if(document.cookie.length>0)for(o=document.cookie.split(BrowserAgent.globals.semiColonChar),s=0;s<o.length;s++)if(2===(n=o[s].split(BrowserAgent.globals.equalChar)).length&&a.test(n[0])){g=n[0];break}g&&(document.cookie=g+"=; expires=Thu, 01-Jan-1970 00:00:01 GMT"+(t?"; domain="+t:"")+(r?"; path="+r:""))}else BrowserAgent.logger.warn("deleteCookie: Cannot delete cookie by name "+e)},getRawCookie:function(e){if(!e)return BrowserAgent.logger.warn("getRawCookie: Cannot obtain cookie "+e),null;var r,t,s,o=new RegExp(e);if(document.cookie.length>0)for(t=document.cookie.split(BrowserAgent.globals.semiColonChar),r=0;r<t.length;r++)if(2===(s=t[r].split(BrowserAgent.globals.equalChar)).length&&o.test(s[0]))return decodeURIComponent(BrowserAgent.browserUtils.replaceAll(s[1],"\\+","%20"));return null},tokenizeCookieIntoMap:function(e,r){var t={};if(!e||!r)return BrowserAgent.logger.warn("tokenizeCookieIntoMap : Cannot parse "+e+" by "+r),t;for(var s,o,n=(e=e.replace(/["]/g,"")).split(r),a=0;a<n.length;a++)2===(s=n[a].split("=")).length?t[s[0]]=s[1]:s.length>2&&(o=n[a].indexOf("="),t[s[0]]=n[a].substring(o+1));return t},setRawCookie:function(e,r,t,s,o){if(e)if(-1===[BrowserAgent.cookieUtils.cookies.PLATFORM,BrowserAgent.cookieUtils.cookies.PLATFORMVER,BrowserAgent.cookieUtils.cookies.GAPTIME,BrowserAgent.cookieUtils.cookies.SERVERTIME,BrowserAgent.cookieUtils.cookies.BTRESPID,BrowserAgent.cookieUtils.BAFINGERPRINT].indexOf(e)||BrowserAgent.globals.configs.ALLOW_COOKIES){var n=new Date(BrowserAgentBootstrap.origFuncMap.timeNow()+1e3*t);document.cookie=e+"="+encodeURIComponent(r)+(t?"; expires="+n.toUTCString():"")+(o?"; domain="+o:"")+(s?"; path="+s:"")}else BrowserAgent.logger.info("setRawCookie : Cookie not allowed"+e);else BrowserAgent.logger.warn("setRawCookie : Cannot set cookie with name "+e)},updateCookie:function(e,r){if(e){var t=BrowserAgentBootstrap.origFuncMap.jsonParse(this.getRawCookie(e)),s={};for(var o in t)s[o]=t[o];if("object"==typeof r)for(var n in r)null!==r[n]?s[n]=r[n]:delete s[n];else s=r;this.setRawCookie(e,BrowserAgent.jsonStringify(s),null,"/",null)}else BrowserAgent.logger.warn("updateCookie: Cannot update cookie with name "+e)},updateResDataObjWithCookieData:function(e,r){if(e&&r&&"object"==typeof e&&"object"==typeof r){var t,s;for(s in BrowserAgent.cookieUtils.cookieKeys)e[t=BrowserAgent.cookieUtils.cookieKeys[s]]&&(r[t]=e[t],delete e[t]);t=BrowserAgent.globals.agentCookieKeys;for(s in e)BrowserAgent.globals.agentCookieKeysRegexPattern.test(s)&&(r[t]||(r[t]={}),r[t][s]=e[s]);BrowserAgent.globals.defaultBTRegex.test(r.bt)&&(r.bs=BrowserAgent.globals.UNDEFINED,r.bt=BrowserAgent.globals.UNDEFINED,r.btc=BrowserAgent.globals.UNDEFINED)}else BrowserAgent.logger.warn("updateResDataObjWithCookieData: Cannot update object with data from cookie")},updateHPDataObjWithCookieData:function(e){if(e&&"object"==typeof e){var r,t;for(t in BrowserAgent.cookieUtils.cookieKeys)e[r=BrowserAgent.cookieUtils.cookieKeys[t]]&&(BrowserAgent.globals[r]=e[r],delete e[r]);for(t in e)BrowserAgent.globals.agentCookieKeysRegexPattern.test(t)&&(BrowserAgent.globals.agentCookies||(BrowserAgent.globals.agentCookies={}),BrowserAgent.globals.agentCookies[t]=e[t]);BrowserAgent.globals.defaultBTRegex.test(BrowserAgent.globals.bt)&&(BrowserAgent.globals.bs=BrowserAgent.globals.UNDEFINED,BrowserAgent.globals.bt=BrowserAgent.globals.UNDEFINED,BrowserAgent.globals.btc=BrowserAgent.globals.UNDEFINED)}else BrowserAgent.logger.warn("updateHPDataObjWithCookieData: Cannot update object with data from cookie")},isCookieEnabled:function(){var e=!!navigator.cookieEnabled;if(!0!==e){document.cookie="baTestCookie",e=-1!==document.cookie.indexOf("baTestCookie")}return e},getAppCookies:function(){if(!BrowserAgent.globals.isCookieEnabled)return BrowserAgent.logger.warn("getAppCookies: Cannot obtain cookie snapshot because cookies are disabled."),null;var e,r,t={};if(document.cookie.length<1)return t;r=document.cookie.split("; ");for(var s=0;s<r.length;s++)e=r[s].split(BrowserAgent.globals.equalChar),BrowserAgent.cookieUtils.baCookieRegex.test(e[0])||(t[e[0]]=r[s].substring(e[0].length+1));return t},clearBAResponseCookies:function(){try{var e,r;if(document.cookie.length<1)return;r=document.cookie.split("; ");for(var t=0;t<r.length;t++)e=r[t].split(BrowserAgent.globals.equalChar),BrowserAgent.cookieUtils.baResponseCookieRegex.test(e[0])&&BrowserAgent.cookieUtils.deleteCookie(e[0],BrowserAgent.globals.forwardSlashChar,null)}catch(e){BrowserAgent.logger.error("clearBAResponseCookies: Could not clear BA cookies due to "+e.message)}}},BrowserAgent.errorUtils={origWindowOnError:window.onerror,currErrCt:0,errorKey:"jsError",errorType:{CLIENT:"CLIENT",NETWORK:"NETWORK",SUBTYPE:{EVAL:"EvalError",INT:"InternalError",CORS_ERR:"CORSError",RNG:"RangeError",REF:"ReferenceError",SYN:"SyntaxError",TYP:"TypeError",URI:"URIError",ERR:"error",TIMEOUT:"timeout",ABORT:"abort"}},errorDataFields:{NAME:"Name",TYP:"ErrType",SUB:"SubType",MSG:"Msg",SRC:"File",LIN:"Line",COL:"Col",STK:"Stack",STT:"StartTime",DUR:"Duration",LINENO:"lineno",COLNO:"colno"},init:function(){!1!==BrowserAgent.globals.configs.JSERRORSENABLED?(BrowserAgent.logger.info("errorUtils.init: Attaching to window.onerror event..."),BrowserAgent.globals.userAgents.IE.name===BrowserAgent.globals.platform&&9===BrowserAgent.globals.userAgents.IE.ver?window.onerror=function(e,r,t){BrowserAgent.errorUtils.captureJSErrorIE9(e,r,t),BrowserAgent.errorUtils.origWindowOnError&&BrowserAgent.errorUtils.origWindowOnError.apply(this,arguments)}:window.addEventListener("error",BrowserAgent.errorUtils.captureJSError)):BrowserAgent.logger.info("errorUtils.init: JS Error Monitoring is DISABLED.")},captureCORSError:function(e,r){BrowserAgent.errorUtils.captureJSError(BrowserAgent.errorUtils.createFrameErrorObj(e,r),!1)},createFrameErrorObj:function(e,r){var t=new Error(BrowserAgent.errorUtils.errorType.SUBTYPE.CORS_ERR+" : Refused to display '"+e+"' in a frame because of 'X-Frame-Options' settings."),s={},o=BrowserAgent.errorUtils.errorDataFields.NAME.toLowerCase(),n=BrowserAgent.errorUtils.errorDataFields.STK.toLowerCase();return s[o]=BrowserAgent.errorUtils.errorType.SUBTYPE.CORS_ERR,s[BrowserAgent.errorUtils.errorDataFields.TYP]=BrowserAgent.errorUtils.errorType.NETWORK,s[BrowserAgent.errorUtils.errorDataFields.SUB]=BrowserAgent.errorUtils.errorType.SUBTYPE.CORS_ERR,s[BrowserAgent.errorUtils.errorDataFields.MSG]=t.message,s[BrowserAgent.errorUtils.errorDataFields.SRC]=document.location.href,s[BrowserAgent.errorUtils.errorDataFields.LIN]=r.row,s[BrowserAgent.errorUtils.errorDataFields.COL]=r.col,s[n]=t.message+"\n\t at "+document.location.href+":"+r.row+":"+r.col,t[BrowserAgent.errorUtils.errorDataFields.LINENO]=r.row,t[BrowserAgent.errorUtils.errorDataFields.COLNO]=r.col,t.error=s,t},elementPointInCode:function(e,r){r=r||0;var t,s=e;t=3==s.nodeType?(s=s.parentNode).outerHTML.indexOf(">")+r+1:0;for(var o="";s;){var n=s.outerHTML,a=s.parentNode;if(a&&n){var g=a.outerHTML;g&&(t+=(o=g).indexOf(n))}s=a}var i=o.substr(0,t).split("\n");return{row:i.length,col:i.pop().length}},captureJSError:function(e,r){var t=null;try{if(!e)return void BrowserAgent.logger.warn("captureJSError: Could not capture error. Error object is unavailable.");var s,o=null,n=null;e.error?(o=e.error.stack,n=BrowserAgent.errorUtils.getSubType(e.error.name,e.message)):(BrowserAgent.logger.info("captureJSError: Stack information is unavailable from error object"),n=BrowserAgent.errorUtils.getSubType(null,e.message)),s=r&&!n?e.message:n;var a=window.location.href;if(BrowserAgent.configUtils.isErrorExcluded(a,s))return void BrowserAgent.logger.info("captureJSError: For page: "+a+" and message: "+s+", has been excluded");if(!(t=BrowserAgent.evtUtils.getEvtObject(BrowserAgent.globals.evtTypes.JSERR,!0,BrowserAgent.errorUtils.errorDataFields.STT)))return;t[BrowserAgent.errorUtils.errorDataFields.TYP]=BrowserAgent.errorUtils.errorType.CLIENT,t[BrowserAgent.errorUtils.errorDataFields.SUB]=n,t[BrowserAgent.errorUtils.errorDataFields.MSG]=e.message,t[BrowserAgent.errorUtils.errorDataFields.SRC]=e.filename,t[BrowserAgent.errorUtils.errorDataFields.LIN]=e.lineno,t[BrowserAgent.errorUtils.errorDataFields.COL]=e.colno,t[BrowserAgent.errorUtils.errorDataFields.STK]=o,t.isDone=!0}catch(e){t&&(t.isDelete=!0),BrowserAgent.logger.error("captureJSError: Could not capture JS error due to "+e.message)}},captureJSErrorIE9:function(e,r,t){BrowserAgent.errorUtils.captureJSError({message:e,filename:r,lineno:t},!0)},getSubType:function(e,r){if("string"!=typeof e){if("string"!=typeof r)return BrowserAgent.logger.warn("getSubType: Could not obtain error subtype"),null;var t=r.split(":");return t.length<2?null:t[0]}return e},createResourceError:function(e,r,t,s,o,n){var a={};if(e){if(!e.isDelete&&(n||!e[BrowserAgent.globals.ajaxDataKeys.ERR])){if(!e[BrowserAgent.globals.ajaxDataKeys.ERR]){if(BrowserAgent.evtUtils.isClamped(BrowserAgent.evtUtils.evtClampFlags.ERR.type,BrowserAgent.errorUtils.currErrCt,BrowserAgent.globals.configs.ERRORCLAMPPERINTERVAL))return void(e.isDelete=!0);BrowserAgent.errorUtils.currErrCt++}a[BrowserAgent.errorUtils.errorDataFields.STT]=BrowserAgentBootstrap.origFuncMap.timeNow(),a[BrowserAgent.errorUtils.errorDataFields.TYP]=BrowserAgent.errorUtils.errorType.NETWORK,a[BrowserAgent.errorUtils.errorDataFields.SUB]=r,a[BrowserAgent.errorUtils.errorDataFields.MSG]=t||BrowserAgent.browserUtils.getDefaultHttpStatusCodeMessage(s),a[BrowserAgent.errorUtils.errorDataFields.STK]=o,e[BrowserAgent.globals.ajaxDataKeys.ERR]=a}}else BrowserAgent.logger.info("createResourceError: Skipping creation of resource error as resource event object is not present. Perhaps, events are clamped.")}},BrowserAgent.funcUtils={tracerTypes:{PRE:"pre",POST:"post"},tracers:{xhrOpenPre:function(){try{var e=performance.now();this._BAState||(this._BAState={},this._BAState.xhrOpenPre={});var r=arguments[arguments.length-1];if(this._BAState.xhrOpenPre.isError=!1,this._BAState.xhrOpenPre._isAjaxInstrumented=!0,!1===BrowserAgent.globals.configs.AJAXMETRICSENABLED)return BrowserAgent.logger.info("xhrOpenPre: AJAX Metrics are DISABLED."),void(this._BAState.xhrOpenPre._isAjaxInstrumented=!1);if(BrowserAgent.globals.currPagePtr.isExcluded)return void(this._BAState.xhrOpenPre._isAjaxInstrumented=!1);if(this._BAState.xhrOpenPre._url=r.invocationData[1],this._BAState.xhrOpenPre._fullURL=BrowserAgent.browserUtils.getFullURL(this._BAState.xhrOpenPre._url),BrowserAgent.configUtils.isUrlExcluded(this._BAState.xhrOpenPre._fullURL))return this._BAState.xhrOpenPre._isAjaxInstrumented=!1,void BrowserAgent.logger.info("xhrOpenPre: AJAX URL ["+this._BAState.xhrOpenPre._fullURL+"] is configured to be EXCLUDED.");this._BAState.xhrOpenPre._httpMethod=r.invocationData[0],this._BAState.xhrOpenPre._async=!0,r.invocationData.length>=3&&(this._BAState.xhrOpenPre._async=r.invocationData[2]),BrowserAgent.globals.selfMonPerformance.ajax.totalTimeMS+=performance.now()-e}catch(e){this._BAState.xhrOpenPre.isError=!0,BrowserAgent.logger.error("xhrOpenPre ("+this._BAState.origFunctionName+"): "+e.message)}},xhrOnloadEndPost:function(){var e=performance.now();this._BAState.xhrSendPre.contentLen=BrowserAgent.funcUtils.calculateAjaxResponseSize(this),"number"==typeof this._BAState.xhrSendPre.contentLen&&(this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.ajaxDataKeys.RESPONSE_CONTENT_LENGTH]=this._BAState.xhrSendPre.contentLen),this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.timestampNames.FIRST_BYTE]||this._BAState.xhrSendPre.contentLen||(this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.timestampNames.FIRST_BYTE]=this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.timestampNames.LAST_BYTE]),void 0===this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.ajaxDataKeys.STATUS_CODE]&&(this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.ajaxDataKeys.STATUS_CODE]=this.status),void 0===this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.ajaxDataKeys.STATUS_TEXT]&&(this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.ajaxDataKeys.STATUS_TEXT]=this.statusText),(0===this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.ajaxDataKeys.STATUS_CODE]&&4===this.readyState||this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.ajaxDataKeys.STATUS_CODE]>=400&&this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.ajaxDataKeys.STATUS_CODE]<=600)&&BrowserAgent.errorUtils.createResourceError(this._BAState.xhrSendPre.evtObj,BrowserAgent.errorUtils.errorType.SUBTYPE.ERR,this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.ajaxDataKeys.STATUS_TEXT],this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.ajaxDataKeys.STATUS_CODE],null,!1);var r=BrowserAgent.funcUtils.getValueFromHeader(this,BrowserAgent.globals.snippetAttrNames.RESPONSE_BT);if(r||(r=BrowserAgent.cookieUtils.getRawCookie(BrowserAgent.cookieUtils.cookies.BTRESP+"-"+this._BAState.xhrSendPre.evtObj.id)),r){var t=BrowserAgent.cookieUtils.tokenizeCookieIntoMap(r,",");BrowserAgent.cookieUtils.updateResDataObjWithCookieData(t,this._BAState.xhrSendPre.evtObj)}BrowserAgent.cookieUtils.deleteCookie(BrowserAgent.cookieUtils.cookies.BTRESP+"-"+this._BAState.xhrSendPre.evtObj.id,"/",null);var s=this._BAState.xhrSendPre.evtObj[BrowserAgent.cookieUtils.cookieKeys.CorBrowsGUIDChar];(s&&BrowserAgent.globals.lastCorBrowserGUIDsUsed.hasItem(s)||this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.ajaxDataKeys.STATUS_CODE]===BrowserAgent.globals.httpStatusCodes.NOT_MODIFIED_304)&&(delete this._BAState.xhrSendPre.evtObj[BrowserAgent.cookieUtils.cookieKeys.CorBrowsGUIDChar],delete this._BAState.xhrSendPre.evtObj[BrowserAgent.cookieUtils.cookieKeys.apmStartTimeChar],delete this._BAState.xhrSendPre.evtObj[BrowserAgent.cookieUtils.cookieKeys.apmEndTimeChar]),(s=this._BAState.xhrSendPre.evtObj[BrowserAgent.cookieUtils.cookieKeys.CorBrowsGUIDChar])&&BrowserAgent.globals.lastCorBrowserGUIDsUsed.addItem(s),BrowserAgent.globals.selfMonPerformance.ajax.totalTimeMS+=performance.now()-e,BrowserAgent.globals.selfMonPerformance.ajax.numberOfAjax+=1,BrowserAgent.globals.selfMonPerformance.ajax.avgTimePerAjaxMS=BrowserAgent.globals.selfMonPerformance.ajax.totalTimeMS/BrowserAgent.globals.selfMonPerformance.ajax.numberOfAjax},xhrSendPre:function(){var e=performance.now();this._BAState.xhrSendPre||(this._BAState.xhrSendPre={});var r=arguments[arguments.length-1];this._BAState.xhrSendPre.isError=!1,this._BAState.xhrSendPre.contentLen=null;try{if(!this._BAState.xhrOpenPre.isError&&this._BAState.xhrOpenPre._isAjaxInstrumented){if(this._BAState.xhrSendPre.evtObjTS=BrowserAgentBootstrap.origFuncMap.timeNow(),this._BAState.xhrSendPre.evtObj=BrowserAgent.evtUtils.getEvtObject(BrowserAgent.globals.evtTypes.RES,!1,null),!this._BAState.xhrSendPre.evtObj)return void(this._BAState.xhrSendPre.isError=!0);BrowserAgent.cookieUtils.setRawCookie(BrowserAgent.cookieUtils.cookies.BTRESPID,this._BAState.xhrSendPre.evtObj.id,2,"/",null),this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.ajaxDataKeys.URL]=this._BAState.xhrOpenPre._fullURL,this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.ajaxDataKeys.METHOD]=this._BAState.xhrOpenPre._httpMethod,this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.ajaxDataKeys.ASYNC]=this._BAState.xhrOpenPre._async,this._BAState.xhrSendPre.bodySize=BrowserAgent.funcUtils.calculateAjaxRequestSize(r.invocationData[0]),!this._BAState.xhrSendPre.isError&&this._BAState.xhrSendPre.bodySize&&(this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.ajaxDataKeys.REQUEST_BODY_SIZE]=this._BAState.xhrSendPre.bodySize);var t=this.onloadend,s=this.onreadystatechange,o=this.onload,n=this.onerror,a=this.ontimeout,g=this.onabort;if(this.onload=function(){var e,r=performance.now();o&&(BrowserAgent.funcUtils.setCbkStart.apply(this,["xhrSendPre - onload pre"]),BrowserAgent.globals.selfMonPerformance.ajax.totalTimeMS+=performance.now()-r,e=o.apply(this,arguments));try{BrowserAgent.globals.isOldXHR&&!this._BAState.xhrSendPre.isError&&(this.readyState===this.DONE&&(void 0===this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.ajaxDataKeys.STATUS_CODE]&&(this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.ajaxDataKeys.STATUS_CODE]=this.status),void 0===this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.ajaxDataKeys.STATUS_TEXT]&&(this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.ajaxDataKeys.STATUS_TEXT]=this.statusText)),BrowserAgent.funcUtils.tracers.xhrOnloadEndPost.apply(this),this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.timestampNames.CALLBACK_END_TIME]||(this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.timestampNames.CALLBACK_END_TIME]=BrowserAgentBootstrap.origFuncMap.timeNow()),BrowserAgent.funcUtils.evaluateAndAdjustEvtObject(this._BAState.xhrSendPre))}catch(e){this._BAState.xhrSendPre.isError=!0,this._BAState.xhrSendPre.evtObj&&(this._BAState.xhrSendPre.evtObj.isDelete=!0),BrowserAgent.logger.error("xhrSendPre - onload post ("+this._BAState.xhrOpenPre._fullURL+"): "+e.message)}return e},this.onloadend=function(){var e,r=performance.now();t&&(BrowserAgent.funcUtils.setCbkStart.apply(this,["xhrSendPre - onloadend pre"]),BrowserAgent.globals.selfMonPerformance.ajax.totalTimeMS+=performance.now()-r,e=t.apply(this,arguments));try{this._BAState.xhrSendPre.isError||(this.readyState===this.DONE&&(void 0===this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.ajaxDataKeys.STATUS_CODE]&&(this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.ajaxDataKeys.STATUS_CODE]=this.status),void 0===this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.ajaxDataKeys.STATUS_TEXT]&&(this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.ajaxDataKeys.STATUS_TEXT]=this.statusText)),BrowserAgent.funcUtils.tracers.xhrOnloadEndPost.apply(this),this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.timestampNames.CALLBACK_END_TIME]||(this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.timestampNames.CALLBACK_END_TIME]=BrowserAgentBootstrap.origFuncMap.timeNow()),BrowserAgent.funcUtils.evaluateAndAdjustEvtObject(this._BAState.xhrSendPre))}catch(e){this._BAState.xhrSendPre.isError=!0,this._BAState.xhrSendPre.evtObj&&(this._BAState.xhrSendPre.evtObj.isDelete=!0),BrowserAgent.logger.error("xhrSendPre - onloadend post ("+this._BAState.xhrOpenPre._fullURL+"): "+e.message)}return e},this.onreadystatechange=function(){var e,r=performance.now();try{this._BAState.xhrSendPre.isError||(this.readyState===this.LOADING?this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.timestampNames.FIRST_BYTE]=BrowserAgentBootstrap.origFuncMap.timeNow():this.readyState===this.DONE&&(this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.ajaxDataKeys.STATUS_CODE]=this.status,this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.ajaxDataKeys.STATUS_TEXT]=this.statusText,this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.timestampNames.LAST_BYTE]=BrowserAgentBootstrap.origFuncMap.timeNow()))}catch(e){this._BAState.xhrSendPre.isError=!0,this._BAState.xhrSendPre.evtObj&&(this._BAState.xhrSendPre.evtObj.isDelete=!0),BrowserAgent.logger.error("xhrSendPre - orsc pre 1 ("+this._BAState.xhrOpenPre._fullURL+"): "+e.message)}return s&&(this.readyState===this.DONE&&BrowserAgent.funcUtils.setCbkStart.apply(this,["xhrSendPre - orsc pre 2"]),BrowserAgent.globals.selfMonPerformance.ajax.totalTimeMS+=performance.now()-r,e=s.apply(this,arguments)),e},this.onerror=function(){var e;try{BrowserAgent.errorUtils.createResourceError(this._BAState.xhrSendPre.evtObj,BrowserAgent.errorUtils.errorType.SUBTYPE.ERR,this.statusText,this.status,null,!1)}catch(e){this._BAState.xhrSendPre.isError=!0,this._BAState.xhrSendPre.evtObj&&(this._BAState.xhrSendPre.evtObj.isDelete=!0),BrowserAgent.logger.error("xhrSendPre - onerror pre 1 ("+this._BAState.xhrOpenPre._fullURL+"): "+e.message)}return n&&(BrowserAgent.funcUtils.setCbkStart.apply(this,["xhrSendPre - onerror pre 2"]),e=n.apply(this,arguments)),e},this.ontimeout=function(){var e;try{BrowserAgent.globals.isOldXHR?this._BAState.xhrSendPre.evtObj&&(this._BAState.xhrSendPre.evtObj.isDelete=!0):BrowserAgent.errorUtils.createResourceError(this._BAState.xhrSendPre.evtObj,BrowserAgent.errorUtils.errorType.SUBTYPE.TIMEOUT,BrowserAgent.errorUtils.errorType.SUBTYPE.TIMEOUT,this.status,null,!1)}catch(e){this._BAState.xhrSendPre.isError=!0,this._BAState.xhrSendPre.evtObj&&(this._BAState.xhrSendPre.evtObj.isDelete=!0),BrowserAgent.logger.error("xhrSendPre - ontimeout pre 1 ("+this._BAState.xhrOpenPre._fullURL+"): "+e.message)}return a&&(BrowserAgent.funcUtils.setCbkStart.apply(this,["xhrSendPre - ontimeout pre 2"]),e=a.apply(this,arguments)),e},this.onabort=function(){var e;try{BrowserAgent.errorUtils.createResourceError(this._BAState.xhrSendPre.evtObj,BrowserAgent.errorUtils.errorType.SUBTYPE.ABORT,BrowserAgent.errorUtils.errorType.SUBTYPE.ABORT,this.status,null,!1)}catch(e){this._BAState.xhrSendPre.isError=!0,this._BAState.xhrSendPre.evtObj&&(this._BAState.xhrSendPre.evtObj.isDelete=!0),BrowserAgent.logger.error("xhrSendPre - onabort pre 1 ("+this._BAState.xhrOpenPre._fullURL+"): "+e.message)}return g&&(BrowserAgent.funcUtils.setCbkStart.apply(this,["xhrSendPre - onabort pre 2"]),e=g.apply(this,arguments)),e},BrowserAgent.globals.isOldXHR){var i,l=this.abort;this.abort=function(){try{this._BAState.xhrSendPre.evtObj&&(this._BAState.xhrSendPre.evtObj.isDelete=!0)}catch(e){this._BAState.xhrSendPre.isError=!0,BrowserAgent.logger.error("xhrSendPre - abort pre ("+this._BAState.xhrOpenPre._fullURL+"): "+e.message)}return l&&(i=l.apply(this,arguments)),i}}this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.timestampNames.REQUEST_START]=BrowserAgentBootstrap.origFuncMap.timeNow(),this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.trackerDataKey]=BrowserAgent.browserUtils.cloneTrackerData()}}catch(e){this._BAState.xhrSendPre.isError=!0,this._BAState.xhrSendPre.evtObj&&(this._BAState.xhrSendPre.evtObj.isDelete=!0),BrowserAgent.logger.error("xhrSendPre ("+this._BAState.xhrOpenPre._fullURL+"): "+e.message)}BrowserAgent.globals.selfMonPerformance.ajax.totalTimeMS+=performance.now()-e},JSFuncPre:function(){var e=arguments[arguments.length-1];try{if(e.JSFuncPre||(e.JSFuncPre={}),e.JSFuncPre.isError=!1,e.JSFuncPre.isInstrumented=!0,!1===BrowserAgent.globals.configs.JSFUNCTIONMETRICSENABLED)return BrowserAgent.logger.info("JSFuncPre ("+e.origFunctionName+"): JS Function Metrics are DISABLED."),void(e.JSFuncPre.isInstrumented=!1);if(BrowserAgent.globals.currPagePtr.isExcluded)return void(e.JSFuncPre.isInstrumented=!1);e.JSFuncPre.evtObj=BrowserAgent.evtUtils.getEvtObject(BrowserAgent.globals.evtTypes.FN,!1,BrowserAgent.globals.timestampNames.START_TIME),e.JSFuncPre.evtObj||(e.JSFuncPre.isError=!0)}catch(r){e.JSFuncPre.isError=!0,e.JSFuncPre.evtObj&&(e.JSFuncPre.evtObj.isDelete=!0),BrowserAgent.logger.error("JSFuncPre ("+e.origFunctionName+"): "+r.message)}},JSFuncPost:function(){var e=arguments[arguments.length-1];try{!e.JSFuncPre.isError&&e.JSFuncPre.isInstrumented&&(e.JSFuncPre.evtObj[BrowserAgent.globals.trackerDataKey]=BrowserAgent.browserUtils.cloneTrackerData(),e.JSFuncPre.evtObj[BrowserAgent.globals.timestampNames.REQUEST_START]=BrowserAgentBootstrap.origFuncMap.timeNow(),e.JSFuncPre.evtObj.fnName=e.origFunctionName,e.JSFuncPre.evtObj.isDone=!0)}catch(r){e.JSFuncPre.evtObj&&(e.JSFuncPre.evtObj.isDelete=!0),BrowserAgent.logger.error("JSFuncPost ("+e.origFunctionName+"): "+r.message)}},routeChangePre:function(){var e=arguments[arguments.length-1];try{if(e.routeChangePre||(e.routeChangePre={}),e.routeChangePre.isError=!1,e.routeChangePre[BrowserAgent.globals.softPageDataKeys.START]=BrowserAgentBootstrap.origFuncMap.timeNow(),e.routeChangePre[BrowserAgent.globals.trackerDataKey]=BrowserAgent.browserUtils.cloneTrackerData(),!BrowserAgent.globals.configs.PAGELOADMETRICSENABLED)return void BrowserAgent.logger.info("routeChangePre: Soft Page Metrics are DISABLED.");(BrowserAgent.globals.domChangeTimeoutId||BrowserAgent.globals.domChangeTimerId)&&(BrowserAgent.logger.debug(e.origFunctionName+" routeChangePre: DOM change tracking terminated by new route change."),BrowserAgent.pageUtils.endDomTracking(e.routeChangePre[BrowserAgent.globals.softPageDataKeys.START]))}catch(r){e.routeChangePre.isError=!0,BrowserAgent.logger.error("routeChangePre ("+e.origFunctionName+"): "+r.message)}},routeChangePost:function(){var e=arguments[arguments.length-1];try{if(!1===BrowserAgent.globals.configs.BROWSERAGENTENABLED)return;if(BrowserAgent.pageUtils.addNewPageBucket(BrowserAgent.globals.pageBucketTypes.SP,window.location.href,e.routeChangePre[BrowserAgent.globals.softPageDataKeys.START],!0,e.routeChangePre[BrowserAgent.globals.trackerDataKey]),!BrowserAgent.globals.isSoftPageLoad)return;e.routeChangePre.isError||BrowserAgent.pageUtils.startDomTracking(e.routeChangePre[BrowserAgent.globals.softPageDataKeys.START],e.routeChangePre[BrowserAgent.globals.trackerDataKey])}catch(r){BrowserAgent.logger.error("routeChangePost ("+e.origFunctionName+"): "+r.message)}},jQXHRPost:function(){BrowserAgent.globals.selfMonPerformance.jquery.numberOfJQ+=1;var e=performance.now(),r=arguments[arguments.length-1];try{if(!1===BrowserAgent.globals.isJQ)return;if(r.jQXhrPost||(r.jQXhrPost={}),"boolean"!=typeof BrowserAgent.globals.isJQ&&BrowserAgent.browserUtils.isJQPresent(),!0===r.jQXhrPost.isVisited)return;$.ajaxPrefilter(function(e,t,s){var o=performance.now();if(!1!==BrowserAgent.globals.configs.AJAXMETRICSENABLED){e._evtInfo={},e._evtInfo.evtId=BrowserAgent.globals.peekSequenceNum(),e._evtInfo.pageId=BrowserAgent.globals.currPagePtr.id;var n,a=t.success,g=t.complete,i=t.error;BrowserAgent.globals.selfMonPerformance.jquery.totalTimeMS+=performance.now()-o,a&&(e.success=function(e,t,s){o=performance.now();var g;try{(g=BrowserAgent.globals.pageBucketsMap[this._evtInfo.pageId].evtMap[this._evtInfo.evtId])&&(g[BrowserAgent.globals.timestampNames.CALLBACK_START_TIME]=BrowserAgentBootstrap.origFuncMap.timeNow())}catch(e){r.jQXhrPost.isError=!0,g&&(g.isDelete=!0),BrowserAgent.logger.error("jQuery Success CBK Pre ("+r.origFunctionName+"): "+e.message)}BrowserAgent.globals.selfMonPerformance.jquery.totalTimeMS+=performance.now()-o,n=a.apply(this,arguments),o=performance.now();try{!r.jQXhrPost.isError&&g&&(g[BrowserAgent.globals.timestampNames.CALLBACK_END_TIME]=BrowserAgentBootstrap.origFuncMap.timeNow())}catch(e){r.jQXhrPost.isError=!0,g&&(g.isDelete=!0),BrowserAgent.logger.error("jQuery Success CBK Post ("+r.origFunctionName+"): "+e.message)}return BrowserAgent.globals.selfMonPerformance.jquery.totalTimeMS+=performance.now()-o,BrowserAgent.globals.selfMonPerformance.jquery.avgTimePerJQMS=BrowserAgent.globals.selfMonPerformance.jquery.totalTimeMS/BrowserAgent.globals.selfMonPerformance.jquery.numberOfJQ,n}),g&&(e.complete=function(e,t){var s,o,n=performance.now();try{s=BrowserAgent.globals.pageBucketsMap[this._evtInfo.pageId].evtMap[this._evtInfo.evtId],r.jQXhrPost.isError||!s||s[BrowserAgent.globals.timestampNames.CALLBACK_START_TIME]||(s[BrowserAgent.globals.timestampNames.CALLBACK_START_TIME]=BrowserAgentBootstrap.origFuncMap.timeNow())}catch(e){r.jQXhrPost.isError=!0,s&&(s.isDelete=!0),BrowserAgent.logger.error("jQuery Complete CBK Pre ("+r.origFunctionName+"): "+e.message)}BrowserAgent.globals.selfMonPerformance.jquery.totalTimeMS+=performance.now()-n,o=g.apply(this,arguments),n=performance.now();try{!r.jQXhrPost.isError&&s&&(s[BrowserAgent.globals.timestampNames.CALLBACK_END_TIME]=BrowserAgentBootstrap.origFuncMap.timeNow())}catch(e){r.jQXhrPost.isError=!0,s&&(s.isDelete=!0),BrowserAgent.logger.error("jQuery Complete CBK Post ("+r.origFunctionName+"): "+e.message)}return BrowserAgent.globals.selfMonPerformance.jquery.totalTimeMS+=performance.now()-n,BrowserAgent.globals.selfMonPerformance.jquery.avgTimePerJQMS=BrowserAgent.globals.selfMonPerformance.jquery.totalTimeMS/BrowserAgent.globals.selfMonPerformance.jquery.numberOfJQ,o}),e.error=function(e,t,s){var o,n,a,g;try{(o=BrowserAgent.globals.pageBucketsMap[this._evtInfo.pageId].evtMap[this._evtInfo.evtId])&&(BrowserAgent.globals.isOldXHR?(o.isDelete=!0,r.jQXhrPost.isError=!0):("object"==typeof s?(a=s.message,g=s.stack):a=s||e.statusText,BrowserAgent.errorUtils.createResourceError(o,t,a,e.status,g,!0)))}catch(e){r.jQXhrPost.isError=!0,o&&(o.isDelete=!0),BrowserAgent.logger.error("jQuery Error CBK Pre 1 ("+r.origFunctionName+"): "+e.message)}if(i){try{!r.jQXhrPost.isError&&o&&(o[BrowserAgent.globals.timestampNames.CALLBACK_START_TIME]=BrowserAgentBootstrap.origFuncMap.timeNow())}catch(e){r.jQXhrPost.isError=!0,o&&(o.isDelete=!0),BrowserAgent.logger.error("jQuery Error CBK Pre 2 ("+r.origFunctionName+"): "+e.message)}n=i.apply(this,arguments);try{!r.jQXhrPost.isError&&o&&(o[BrowserAgent.globals.timestampNames.CALLBACK_END_TIME]=BrowserAgentBootstrap.origFuncMap.timeNow())}catch(e){r.jQXhrPost.isError=!0,o&&(o.isDelete=!0),BrowserAgent.logger.error("jQuery Error CBK Post ("+r.origFunctionName+"): "+e.message)}}return n}}}),r.jQXhrPost.isVisited=!0,BrowserAgent.globals.selfMonPerformance.jquery.totalTimeMS+=performance.now()-e}catch(e){BrowserAgent.logger.error("jQuery.ajaxSettings.xhrPost ("+r.origFunctionName+"): "+e.message)}}},evaluateAndAdjustEvtObject:function(e){e.evtObj.isDone=!0;var r=BrowserAgent.globals.EVENT_THRESHOLD+1;if(BrowserAgent.globals.lastUserMouseDown<e.evtObjTS&&(r=e.evtObjTS-BrowserAgent.globals.lastUserMouseDown),r<=BrowserAgent.globals.EVENT_THRESHOLD&&e.evtObj.bucketId!==BrowserAgent.globals.currPagePtr.bucketId&&null!==BrowserAgent.globals.prevPagePtr&&e.evtObj.bucketId===BrowserAgent.globals.prevPagePtr.bucketId){var t=BrowserAgent.evtUtils.getEvtObject(BrowserAgent.globals.evtTypes.RES,!1,null);null!==t&&(BrowserAgent.evtUtils.transferEventObject(e.evtObj,t),e.evtObj.isDone=!0,e.evtObj.isDelete=!0,e.evtObj=t,e.evtObj.isDone=!0)}},init:function(){BrowserAgent.funcUtils.instrumentFunc("XMLHttpRequest.prototype.open",[{name:"BrowserAgent.funcUtils.tracers.xhrOpenPre",func:BrowserAgent.funcUtils.tracers.xhrOpenPre}],null,BrowserAgent.globals.funcInstrumentMaxRetryCount),BrowserAgent.funcUtils.instrumentFunc("XMLHttpRequest.prototype.send",[{name:"BrowserAgent.funcUtils.tracers.xhrSendPre",func:BrowserAgent.funcUtils.tracers.xhrSendPre}],null,BrowserAgent.globals.funcInstrumentMaxRetryCount),window.history&&window.MutationObserver&&(BrowserAgent.funcUtils.instrumentFunc("history.pushState",[{name:"BrowserAgent.funcUtils.tracers.routeChangePre",func:BrowserAgent.funcUtils.tracers.routeChangePre}],[{name:"BrowserAgent.funcUtils.tracers.routeChangePost",func:BrowserAgent.funcUtils.tracers.routeChangePost}],BrowserAgent.globals.funcInstrumentMaxRetryCount),BrowserAgent.funcUtils.instrumentFunc("history.replaceState",[{name:"BrowserAgent.funcUtils.tracers.routeChangePre",func:BrowserAgent.funcUtils.tracers.routeChangePre}],[{name:"BrowserAgent.funcUtils.tracers.routeChangePost",func:BrowserAgent.funcUtils.tracers.routeChangePost}],BrowserAgent.globals.funcInstrumentMaxRetryCount)),BrowserAgent.funcUtils.instrumentFunc("jQuery.ajaxSettings.xhr",null,[{name:"BrowserAgent.funcUtils.tracers.jQXHRPost",func:BrowserAgent.funcUtils.tracers.jQXHRPost}],BrowserAgent.globals.funcInstrumentMaxRetryCount),"undefined"!=typeof BrowserAgentExtension&&BrowserAgentExtension.extAddJSFuncToInstrument()},getFuncFromWindowScope:function(funcName){try{return eval("window."+funcName+";")}catch(e){}return null},cleanseTracerList:function(e,r,t){var s,o,n=[];if("Array"!==BrowserAgent.browserUtils.getObjType(r))return n;for(var a=0;a<r.length;a++)o=r[a].name,BrowserAgent.globals.tracerCacheMap[e][t].hasItem(o)?BrowserAgent.logger.info("cleanseTracerList: Found duplicate "+t+" tracer ["+o+"] for JS Function ["+e+"]. Ignoring it..."):(s=BrowserAgent.funcUtils.getFuncFromWindowScope(o))?(r[a].func=s,n.push(r[a]),BrowserAgent.globals.tracerCacheMap[e][t].addItem(o)):BrowserAgent.logger.warn("cleanseTracerList: Could not find tracer ["+o+"] for JS Function ["+e+"] in global scope. Ignoring it...");return n},calculateAjaxRequestSize:function(e){var r=BrowserAgent.browserUtils.getObjType(e),t=null;return"String"===r?t=e.length:"Blob"===r||"File"===r?t=e.size:"ArrayBuffer"!==r&&"DataView"!==r||(t=e.byteLength),t},calculateAjaxResponseSize:function(e){var r=null;try{var t=e.responseType,s=BrowserAgent.funcUtils.getValueFromHeader(e,BrowserAgent.globals.contentLengthHdrStr)||BrowserAgent.funcUtils.getValueFromHeader(e,BrowserAgent.globals.contentLengthHdrStrLowerCase);s?r=Number(s):""!==t&&"text"!==t||(r=e.responseText?e.responseText.length:null)}catch(e){BrowserAgent.logger.warn("calculateAjaxResponseSize: Unable to obtain content length due to "+e.message),r=null}return r},getValueFromHeader:function(e,r){try{var t=e.getAllResponseHeaders(),s=t.indexOf(r+BrowserAgent.globals.colonChar),o=null;if(-1!==s){var n=t.substring(s).split(/\r\n/)[0],a=n.indexOf(BrowserAgent.globals.colonChar),g=a+1;a>=1&&g<n.length&&(o=(o=n.slice(g)).replace(/^\s*/,""))}if(o)return decodeURIComponent(BrowserAgent.browserUtils.replaceAll(o,"\\+","%20"))}catch(e){BrowserAgent.logger.warn("getValueFromHeader: Unable to obtain value for the key due to "+e.message)}return null},getInstrumentedFunc:function(e,r){var t=BrowserAgent.globals.functionsToInstrumentMap[r],s=function(){var o,n=[],a=!1;try{for(s._BAState.invocationData=arguments,o=0;o<t.preList.length;o++)t.preList[o].args&&(n=t.preList[o].args),n.push(s._BAState),t.preList[o].func.apply(this,n)}catch(e){a=!0,BrowserAgent.logger.error("getInstrumentedFunc: Error in pre tracer(s) for JS Function ["+r+"] - "+e.message)}var g=e.apply(this,arguments);try{if(s._BAState.funcRetVal=g,a)return g;for(n=[],o=0;o<t.postList.length;o++)t.postList[o].args&&(n=t.postList[o].args),n.push(s._BAState),t.postList[o].func.apply(this,n)}catch(e){BrowserAgent.logger.error("getInstrumentedFunc: Error in post tracer(s) for JS Function ["+r+"] - "+e.message)}return g};return s&&(s._BAState={},s._BAState.origFunctionName=r),delete BrowserAgent.globals.retryFuncIdMap[r],s},instrumentFunc:function(e,r,t,s,o){var n="instrumentFunc: Instrumentation for JS Function [";try{if("string"!=typeof e||e.length<1)return void BrowserAgent.logger.warn("instrumentFunc: Skipping instrumentation for an invalid JS Function ["+e+"]");n+=e;var a=r||[],g=t||[],i=BrowserAgent.globals.functionsToInstrumentMap[e],l=BrowserAgent.funcUtils.isJSFuncTracerPresent(e);if(s===BrowserAgent.globals.funcInstrumentMaxRetryCount&&o&&(BrowserAgent.globals.tracerCacheMap[e]||(BrowserAgent.globals.tracerCacheMap[e]={},BrowserAgent.globals.tracerCacheMap[e][BrowserAgent.funcUtils.tracerTypes.PRE]=new BrowserAgent.Set,BrowserAgent.globals.tracerCacheMap[e][BrowserAgent.funcUtils.tracerTypes.POST]=new BrowserAgent.Set),a=BrowserAgent.funcUtils.cleanseTracerList(e,a,BrowserAgent.funcUtils.tracerTypes.PRE),g=BrowserAgent.funcUtils.cleanseTracerList(e,g,BrowserAgent.funcUtils.tracerTypes.POST),l||(a.push({name:BrowserAgent.globals.jsFuncPreTracerName,func:BrowserAgent.funcUtils.tracers.JSFuncPre}),g.unshift({name:BrowserAgent.globals.jsFuncPostTracerName,func:BrowserAgent.funcUtils.tracers.JSFuncPost}))),i){if(s===BrowserAgent.globals.funcInstrumentMaxRetryCount){var A,B;return l?A=i.preList.pop():B=g.shift(),i.preList=i.preList.concat(a),A&&i.preList.push(A),B&&i.postList.unshift(B),void(i.postList=i.postList.concat(g))}}else BrowserAgent.globals.functionsToInstrumentMap[e]={preList:a,postList:g};var w=BrowserAgent.funcUtils.getFuncFromWindowScope(e);if(!w)return s<0?(BrowserAgent.logger.warn(n+"] FAILED. This could be because it does not exist on this web page."),delete BrowserAgent.globals.retryFuncIdMap[e],delete BrowserAgent.globals.functionsToInstrumentMap[e],void delete BrowserAgent.globals.tracerCacheMap[e]):(s===BrowserAgent.globals.funcInstrumentMaxRetryCount&&BrowserAgent.logger.info("instrumentFunc: JS Function ["+e+"] could not be found in the browser window scope. Scheduling retry..."),void(BrowserAgent.globals.retryFuncIdMap[e]=setTimeout(function(){BrowserAgent.funcUtils.instrumentFunc(e,r,t,s-1,o)},BrowserAgent.globals.retryInterval)));BrowserAgent.funcUtils.saveOrigObj(e,w),BrowserAgent.logger.info("instrumentFunc: Instrumenting JS Function ["+e+"]..."),BrowserAgent.funcUtils.assignFunc(e,BrowserAgent.funcUtils.getInstrumentedFunc(w,e)),BrowserAgent.logger.info(n+"] SUCCEEDED.")}catch(r){BrowserAgent.logger.warn(n+"] FAILED."),delete BrowserAgent.globals.functionsToInstrumentMap[e],delete BrowserAgent.globals.tracerCacheMap[e],delete BrowserAgent.globals.retryFuncIdMap[e]}},deInstrumentFunc:function(e,r,t,s){if("string"!=typeof e||e.length<1)BrowserAgent.logger.warn("deInstrumentFunc: Skipping De-instrumentation for an invalid JS Function ["+e+"]");else if(!BrowserAgent.globals.functionsToInstrumentMap[e]||s&&!BrowserAgent.globals.tracerCacheMap[e])BrowserAgent.logger.warn("deInstrumentFunc: Skipping De-instrumentation for an un-instrumented JS Function ["+e+"]");else{var o;if(r||(r=[],s&&(r=BrowserAgent.globals.tracerCacheMap[e].pre.getAll())),t||(t=[],s&&(t=BrowserAgent.globals.tracerCacheMap[e].post.getAll())),s){for(o=0;o<r.length;o++)BrowserAgent.globals.tracerCacheMap[e].pre.removeItem(r[o]);for(o=0;o<t.length;o++)BrowserAgent.globals.tracerCacheMap[e].post.removeItem(t[o])}BrowserAgent.globals.functionsToInstrumentMap[e].preList=BrowserAgent.funcUtils.filterTracers(BrowserAgent.globals.functionsToInstrumentMap[e].preList,r),BrowserAgent.globals.functionsToInstrumentMap[e].postList=BrowserAgent.funcUtils.filterTracers(BrowserAgent.globals.functionsToInstrumentMap[e].postList,t),s&&BrowserAgent.globals.tracerCacheMap[e].pre.isEmpty()&&BrowserAgent.globals.tracerCacheMap[e].post.isEmpty()&&(delete BrowserAgent.globals.tracerCacheMap[e],BrowserAgent.globals.functionsToInstrumentMap[e].preList=BrowserAgent.funcUtils.filterTracers(BrowserAgent.globals.functionsToInstrumentMap[e].preList,[BrowserAgent.globals.jsFuncPreTracerName]),BrowserAgent.globals.functionsToInstrumentMap[e].postList=BrowserAgent.funcUtils.filterTracers(BrowserAgent.globals.functionsToInstrumentMap[e].postList,[BrowserAgent.globals.jsFuncPostTracerName]))}},filterTracers:function(e,r){return e.filter(function(e){return r.indexOf(e.name)<0})},isJSFuncTracerPresent:function(e){if(!BrowserAgent.globals.functionsToInstrumentMap[e])return!1;for(var r=BrowserAgent.globals.functionsToInstrumentMap[e].preList,t=0;t<r.length;t++)if(r[t].name===BrowserAgent.globals.jsFuncPreTracerName)return!0;return!1},setCbkStart:function(e){try{this._BAState.xhrSendPre.isError||this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.timestampNames.CALLBACK_START_TIME]||(this._BAState.xhrSendPre.evtObj[BrowserAgent.globals.timestampNames.CALLBACK_START_TIME]=BrowserAgentBootstrap.origFuncMap.timeNow())}catch(r){this._BAState.xhrSendPre.isError=!0,this._BAState.xhrSendPre.evtObj&&(this._BAState.xhrSendPre.evtObj.isDelete=!0),BrowserAgent.logger.error(e+" ("+this._BAState.xhrOpenPre._fullURL+"): "+r.message)}},assignFunc:function(funcName,b){b&&eval("window."+funcName+" = b;")},saveOrigObj:function(e,r){r&&e?BrowserAgentBootstrap.origFuncMap[e]=r:BrowserAgent.logger.warn("saveOrigObj: Cannot save original object without key or the object itself.")}},BrowserAgent.jsonUtils={jsonConstants:{SCHEMA_VERSION:"2.0",CREATOR_NAME:"BA",CREATOR_VERSION:"1.0",APP_VERSION:"1.0"},createURLXAttribute:function(e){return e?BrowserAgent.jsonUtils.createXAttribute("url",e,null):null},truncateMetricPath:function(e){return BrowserAgent.globals.configs.ENABLE_TRUNCATE_URL&&e.includes(BrowserAgent.globals.configs.TRUNCATE_URL_VALUE)&&(BrowserAgent.logger.info("Initial metric path "+e),e=e.substring(0,e.indexOf(BrowserAgent.globals.configs.TRUNCATE_URL_VALUE,1)),BrowserAgent.logger.info("Truncated metric path "+e)),e},createTT:function(e,r,t,s,o,n,a,g,i){var l={},A=!1,B={x_attributeList:[]},w=t;if(t>0&&s>0&&n>0&&a>0&&(t>s||t+o<s)){(!g||isNaN(g)||g<s)&&(g=s);var c=g-s;(w=t+Math.ceil((n-c)/2)+g-a)>s&&(w=s)}if(n||(w=s),w<t-6e5&&(w=t,r=null),e&&(e=BrowserAgent.jsonUtils.truncateMetricPath(e),l.path=e,A=!0),"number"!=typeof o||isNaN(o)||(l.duration=o,A=!0),s&&r&&(l.correlationBrowserGUID=r,A=!0),"number"!=typeof t||isNaN(t)||(l.startTime=t,A=!0),s&&r&&"number"==typeof w&&!isNaN(w)&&(l.adjustedStartTime=w,A=!0),"undefined"!=typeof BrowserAgentExtension){if(BrowserAgentExtension.extAddCustomOptionalProperty(),BrowserAgentExtension.extCustomOptionalPropertyList.length>0){for(var u=0;u<BrowserAgentExtension.extCustomOptionalPropertyList.length;u++){var p=BrowserAgentExtension.extCustomOptionalPropertyList[u];BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createXAttribute(p.name,p.value,p.description),B.x_attributeList)}BrowserAgentExtension.extCustomOptionalPropertyList=[]}var f=BrowserAgentBootstrap.origFuncMap.jsonParse(BrowserAgent.storageUtils.getFromStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BATTPERST));for(var d in f)B.x_attributeList=B.x_attributeList.concat(f[d]);var E="false";BrowserAgent.globals.isSyntheticData&&(E="true"),B.x_attributeList=A?B.x_attributeList.concat({name:BrowserAgent.globals.traceSource,value:BrowserAgent.globals.traceSourceBrowser}):B.x_attributeList,B.x_attributeList=A?B.x_attributeList.concat({name:"TTPlugin.globalAttribute.AXAAppName",value:BrowserAgent.globals.appInfo.id}):B.x_attributeList,B.x_attributeList=A?B.x_attributeList.concat({name:BrowserAgent.globals.isSynthetic,value:E}):B.x_attributeList,B.x_attributeList.length>0&&(l.x_attributes=B,A=!0)}return i&&(l.bucketId=i,l.adjustedStartTime||(l.adjustedStartTime=l.startTime),A=!0),A?l:null},createMetric:function(e,r,t,s,o){if(!BrowserAgent.jsonUtils.validateMetric(e,r,t,s,o))return BrowserAgent.logger.info("createMetric: Invalid metric input. Discard metric..."),null;if("undefined"!=typeof BrowserAgentExtension){if(e){var n=e.split("|"),a=n[n.length>2?2:n.length-1];(void 0===a||a&&("/"===a.trim()||""===a.trim()))&&(n[n.length>2?2:n.length-1]="/"+BrowserAgent.globals.appInfo.id),("true"===BrowserAgent.globals.appInfo.useAxaAppName||!0===BrowserAgent.globals.appInfo.useAxaAppName)&&n.length>=1&&(n[1]=BrowserAgent.globals.appInfo.id);var g=sessionStorage.getItem(BrowserAgent.storageUtils.storageKeys.BATTPERST);if(g){var i=JSON.parse(g).axa_transaction;if(i)for(var l in i){var A=i[l];if(A&&A.name&&A.name===BrowserAgentExtension.internal.axaExtDataKeys.TXNNAME){n[n.length>2?2:n.length-1]=A.value,e=n.join("|");break}}}e=n.join("|")}var B=BrowserAgentExtension.extNameFormatter(e,r,t,s,o);if(B){if(!BrowserAgent.jsonUtils.validateMetric(B.path,B.name,B.unit,B.accumulatorType,B.value))return BrowserAgent.logger.info("createMetric: Invalid metric input after Name Formatter. Discard metric..."),null;e=B.path,r=B.name,t=B.unit,s=B.accumulatorType,o=B.value}}var w={path:e=BrowserAgent.jsonUtils.truncateMetricPath(e),name:r,accumulatorType:s,value:o.toString()};return 0===s&&t&&(w.unit=t),w},validateMetric:function(e,r,t,s,o){if("string"!=typeof e||0===e.length||"string"!=typeof r||0===r.length||"number"!=typeof s)return!1;switch(s){case BrowserAgent.globals.metricAggregatorType.STRING:if("string"!=typeof o||o.length<1)return!1;break;default:if("number"!=typeof o||isNaN(o)||o<0)return!1}for(var n in BrowserAgent.globals.metricAggregatorType)if(s===BrowserAgent.globals.metricAggregatorType[n])return!0;return!1},createBS:function(e,r,t){return e&&e!==BrowserAgent.globals.UNDEFINED?{name:e,businessTransactionList:[{name:r,transactions:{transactionList:[{name:t}]}}]}:null},addToList:function(e,r){r&&e&&r.push(e)},createAPMData:function(e,r){var t={},s=!1;return e&&e.length>0&&(t.metrics={metricList:e},s=!0),r&&r.length>0&&(t.transactionTraces={transactionTraceList:r},s=!0),s?t:null},createRequest:function(e,r,t){var s={},o=!1;return"string"==typeof e&&e.length>0&&(s.url=e,o=!0),"string"==typeof r&&r.length>0&&(s.method=r.toUpperCase(),o=!0),"number"==typeof t&&t>0&&(s.bodySize=t,o=!0),o?s:null},createResponse:function(e,r,t){var s={},o=!1;return"number"==typeof e&&(s.status=e,o=!0),"string"==typeof r&&r.length>0&&(s.statusText=r),t&&(s.content=t),o?s:null},createContent:function(e){var r={},t=!1;return"number"==typeof e&&(r.size=e,t=!0),t?r:null},createResource:function(e,r,t,s,o,n,a,g,i){var l={},A=!1;return"string"==typeof e&&(l.type=e),"string"==typeof r&&(l.subType=r),"number"==typeof t&&(l.timeStamp=t),s&&(l.businessService=s),o&&(l.apmData=o,A=!0),n&&(l.request=n,A=!0),a&&(l.response=a,A=!0),g&&(l.error=g),i&&(l.axaData=i,A=!0),A?l:null},createError:function(e,r,t,s,o,n,a,g,i,l){var A={},B=!1;return e&&(A.type=e,B=!0),"string"==typeof r&&r.length>0&&(A.subType=r,B=!0),"string"==typeof t&&t.length>0&&(A.message=t,B=!0),"string"==typeof s&&s.length>0&&(A.source=s,B=!0),o&&(A.lineNumber=o,B=!0),n&&(A.columnNumber=n,B=!0),"string"==typeof a&&a.length>0&&(A.stackTrace=a,B=!0),"number"==typeof g&&(A.timeStamp=g,B=!0),i&&(A.apmData=i,B=!0),l&&(A.axaData=l,B=!0),B?A:null},createXAttribute:function(e,r,t){if(!e||!r)return null;e==BrowserAgent.globals.isSynthetic&&(r=!!BrowserAgent.globals.isSyntheticData);var s={};return s.name=e,s.value=r.toString(),t&&(s.description=t),s},createCookies:function(e){if(!e)return null;var r=[],t=!1;for(var s in e)s&&e[s]&&(r.push({name:s,value:e[s]}),t=!0);return t?{cookieList:r}:null},createAXAData:function(e){return e&&e.length>0?{axaEventList:e}:null},createAUTOAXAData:function(e,r,t,s){if(!e||!e.url)return null;var o,n,a,g=[],i=[],l=!1,A=BrowserAgent.browserUtils.parseURL(e.url);if(A&&A.pathname){var B=!("SP"!==e.pageType&&!A.hash);!A.pathname||"/"!==A.pathname&&""!==A.pathname.trim()||(A.pathname="/"+BrowserAgent.globals.appInfo.id),o=B&&A&&A.hash&&A.hash.length>0&&(r||"#/"!==A.hash&&"HP"!=e.pageType)?A.pathname+"_"+A.hash:A.pathname,n=t||e.time,a=s||(e.endTime?e.endTime:BrowserAgentBootstrap.origFuncMap.timeNow()),g.push(BrowserAgent.jsonUtils.createXAttribute("ca_at",o)),g.push(BrowserAgent.jsonUtils.createXAttribute("ca_as",o)),g.push(BrowserAgent.jsonUtils.createXAttribute("txn_s",n)),g.push(BrowserAgent.jsonUtils.createXAttribute("mode","AUTO"))}return g.length>0&&(i.push({eventName:"apptxn_start",eventType:"txn_events",eventValue:o,timeStamp:n,x_attributes:{x_attributeList:g}}),i.push({eventName:"apptxn_end",eventType:"txn_events",eventValue:o,timeStamp:a,x_attributes:{x_attributeList:g}})),i.length>0&&(l=!0),l?{axaEventList:i}:null},createInternalData:function(e,r){if(!e)return null;var t,s,o=BrowserAgent.globals.agentCookiePrefix,n={},a=[];for(var g in r)e[t=o+r[g]]&&(n[t]=e[t],s=!0,delete e[t]);for(g in e)a.push(BrowserAgent.jsonUtils.createXAttribute(g,e[g])),s=!0;return a.length>0&&(n.x_attributes={x_attributeList:a}),s?n:null},updateEUMWithGeo:function(e){var r=BrowserAgent.storageUtils.getFromStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.GEOCUSTOM),t=null;if(null!==r&&(t=BrowserAgentBootstrap.origFuncMap.jsonParse(r),BrowserAgent.globals.geo.lat=t.lat,BrowserAgent.globals.geo.lon=t.lon),!e.clientInfo.geolocation||null!==t){var s=BrowserAgent.globals.geo;s&&s.lat&&s.lon&&s.lat>=-90&&s.lat<=90&&s.lon>=-180&&s.lon<=180&&(e.clientInfo.geolocation={latitude:s.lat,longitude:s.lon})}}},BrowserAgent.RetrySendEventXHR=function(e,r){this.retryCount=BrowserAgent.globals.configs.METRICPAYLOADSENDTRYCOUNT,this.url=e,this.sendData=r,this.sendDataAsString=BrowserAgent.jsonStringify(this.sendData),this.retryDelay=Math.floor(1e3*Math.random()),this.retryInstance=BrowserAgent.browserUtils.generateUUID(),this.hasStarted=!1,this.retryCountOnErrorCBFunction=null,BrowserAgent.evtUtils.addToRetryPayloadsMap(this.retryInstance,this.url,this.sendData);var t=this;this._setupXHR=function(){t.perfStart=performance.now(),BrowserAgent.browserUtils.getXHRforBAMetrics();var e=BrowserAgent.browserUtils.XHRToSendMetrics;e?(e.onerror=function(){t.retryCount>0?(BrowserAgent.evtUtils.addToRetryPayloadsMap(t.retryInstance,t.url,t.sendData),t.retryCount-=1,t.retryDelay=Math.floor(Math.random()*BrowserAgent.globals.MINIMUM_RETRY_DELAY+BrowserAgent.globals.MINIMUM_RETRY_DELAY),BrowserAgent.logger.error("sendMetrics.setupXHR.onerror: payload error. Retry attempts left: "+t.retryCount+". Going to retry in: "+t.retryDelay+" ms."),setTimeout(t._setupXHR,t.retryDelay)):BrowserAgent.logger.error("sendMetrics.setupXHR.onerror: payload error. No more retries left"),t.retryCountOnErrorCBFunction&&t.retryCountOnErrorCBFunction(t.retryCount)},e.onreadystatechange=function(){if(this.readyState===this.DONE&&(204===this.status&&BrowserAgent.globals.BALocalProfileUpdate?(BrowserAgent.logger.info("sendMetrics.setupXHR.orsc: Browser Agent app profile updated. Getting new app profile..."),BrowserAgent.configUtils.getAppProfile(BrowserAgent.globals.profileURL)):0===this.status&&BrowserAgent.logger.error("sendMetrics.setupXHR.orsc: Browser Agent metrics send error. Browser is most likely discarding them."),0!==this.status)){t.perfEnd=performance.now(),BrowserAgent.globals.selfMonPerformance.payload.numberOfPayloads+=1,BrowserAgent.globals.selfMonPerformance.payload.totalSizeBytes+=t.sendDataAsString.length,(0===BrowserAgent.globals.selfMonPerformance.payload.minSizeBytes||BrowserAgent.globals.selfMonPerformance.payload.minSizeBytes>t.sendDataAsString.length)&&(BrowserAgent.globals.selfMonPerformance.payload.minSizeBytes=t.sendDataAsString.length),BrowserAgent.globals.selfMonPerformance.payload.maxSizeBytes<t.sendDataAsString.length&&(BrowserAgent.globals.selfMonPerformance.payload.maxSizeBytes=t.sendDataAsString.length),BrowserAgent.globals.selfMonPerformance.payload.avgSizeBytes=BrowserAgent.globals.selfMonPerformance.payload.totalSizeBytes/BrowserAgent.globals.selfMonPerformance.payload.numberOfPayloads;var e=t.perfEnd-t.perfStart;e<18e5&&(BrowserAgent.globals.selfMonPerformance.payload.totalNetworkTimeMS+=e),BrowserAgent.globals.selfMonPerformance.payload.avgNetworkTimeMS=BrowserAgent.globals.selfMonPerformance.payload.totalNetworkTimeMS/BrowserAgent.globals.selfMonPerformance.payload.numberOfPayloads,BrowserAgent.globals.selfMonPerformance.payload.lastTime=BrowserAgentBootstrap.origFuncMap.timeNow();var r=BrowserAgent.globals.selfMonPerformance.payload.lastTime-BrowserAgent.globals.selfMonPerformance.payload.startTime;BrowserAgent.globals.selfMonPerformance.payload.bytesPerSecond=BrowserAgent.globals.selfMonPerformance.payload.totalSizeBytes/r*1e3,void 0!==window.isSynthetic&&(window.isSynthetic=!1)}},e.open("POST",t.url,!0),e.setRequestHeader("Content-type","application/json; charset=utf-8"),BrowserAgent.evtUtils.removeFromRetryPayloadsMap(t.retryInstance),e.send(t.sendDataAsString),BrowserAgent.logger.debug("sendMetrics.setupXHR: Sending POST with "+t.sendDataAsString)):BrowserAgent.logger.error("sendMetrics.setupXHR: XHR could not be instantiated. Cannot send Browser Agent metrics to URL: "+t.url+" with data as "+t.sendDataAsString)}},BrowserAgent.RetrySendEventXHR.prototype.start=function(e){this.hasStarted?BrowserAgent.logger.warn("RetrySendEventXHR.prototype.start: start can't be called more than once on this instance"):(this.hasStarted=!0,e&&(this.retryCountOnErrorCBFunction=e),this._setupXHR())},BrowserAgent.evtUtils={currEvtCt:0,evtClampMask:0,evtClampFlags:{ERR:{type:"ERR",desc:" ERROR DATA COLLECTION ",code:1},COL:{type:"COL",desc:" EVENT DATA COLLECTION ",code:2},SND:{type:"SND",desc:" EVENT DISPATCH ",code:4}},init:function(){BrowserAgent.evtUtils.setEvtHndlr(BrowserAgent.globals.evtTypes.HPLOAD,BrowserAgent.evtUtils.handleHPLoadEvt),BrowserAgent.evtUtils.setEvtHndlr(BrowserAgent.globals.evtTypes.SPLOAD,BrowserAgent.evtUtils.handleSPLoadEvt),BrowserAgent.evtUtils.setEvtHndlr(BrowserAgent.globals.evtTypes.RES,BrowserAgent.evtUtils.handleResEvt),BrowserAgent.evtUtils.setEvtHndlr(BrowserAgent.globals.evtTypes.JSERR,BrowserAgent.evtUtils.handleJSErrEvt),BrowserAgent.evtUtils.setEvtHndlr(BrowserAgent.globals.evtTypes.FN,BrowserAgent.evtUtils.handleFnEvt),BrowserAgent.evtUtils.setEvtHndlr(BrowserAgent.globals.evtTypes.APMEXT,BrowserAgent.evtUtils.handleAPMExtEvt),BrowserAgent.evtUtils.setEvtHndlr(BrowserAgent.globals.evtTypes.AXAEXT,BrowserAgent.evtUtils.handleAXAExtEvt),BrowserAgent.evtUtils.setEvtHndlr(BrowserAgent.globals.evtTypes.TTIME,BrowserAgent.evtUtils.handleTTimeEvt)},isValidResEvt:function(e){if(!e)return!1;var r=!1;return e[BrowserAgent.globals.timestampNames.REQUEST_START]&&e[BrowserAgent.globals.ajaxDataKeys.URL]&&(r=!0),!!(r&&e[BrowserAgent.globals.RAW_RESOURCE_TIME_DATA]&&e[BrowserAgent.globals.timestampNames.LAST_BYTE])||(!1===e[BrowserAgent.globals.ajaxDataKeys.ASYNC]||BrowserAgent.globals.isJQOne||0===e.status||e.err?r:!!(r&&e[BrowserAgent.globals.timestampNames.LAST_BYTE]&&e[BrowserAgent.globals.timestampNames.FIRST_BYTE]))},getEvtObject:function(e,r,t,s,o){void 0===s&&(s=BrowserAgent.globals.currPagePtr);var n=BrowserAgentBootstrap.origFuncMap.timeNow();if(s.isExcluded)return null;if(BrowserAgent.evtUtils.isClamped(BrowserAgent.evtUtils.evtClampFlags.COL.type,BrowserAgent.evtUtils.currEvtCt,BrowserAgent.globals.configs.EVENTCOLLECTIONCLAMPPERINTERVAL))return null;if(e===BrowserAgent.globals.evtTypes.JSERR&&BrowserAgent.evtUtils.isClamped(BrowserAgent.evtUtils.evtClampFlags.ERR.type,BrowserAgent.errorUtils.currErrCt,BrowserAgent.globals.configs.ERRORCLAMPPERINTERVAL))return null;var a=BrowserAgent.globals.getSequenceNum();if(!BrowserAgent.browserUtils.isSameSession(n)||o){var g=BrowserAgent.pageUtils.addNewPageBucket(s.json.pageType,s.json.url,n,!1,BrowserAgent.browserUtils.cloneTrackerData());g&&(s=g)}else BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BALASTEVENT_TIME,n,!0);return s.evtMap[a]={id:a,type:e,bucketId:s.bucketId},s.evtCount+=1,BrowserAgent.globals.pageWithEventsMap[s.id]=1,r&&(s.evtMap[a][BrowserAgent.globals.trackerDataKey]=BrowserAgent.browserUtils.cloneTrackerData()),t&&(s.evtMap[a][t]=n),BrowserAgent.evtUtils.currEvtCt+=1,e===BrowserAgent.globals.evtTypes.JSERR&&(BrowserAgent.errorUtils.currErrCt+=1),s.evtMap[a]},transferEventObject:function(e,r,t){if(null!==e&&null!==r){void 0===t&&(t=Object.keys(r));var s,o=new BrowserAgent.Set;for(s=0;s<t.length;s++)o.addItem(t[s]);var n=Object.keys(e);for(s=0;s<n.length;s++){var a=n[s];o.hasItem(a)||(r[a]=e[a])}}},setEvtHndlr:function(e,r){BrowserAgent.globals.evtTypes[e]&&"function"==typeof r?BrowserAgent.globals.evtHandlers[e]=r:BrowserAgent.logger.warn("setEvtHndlr: Cannot set event handler for event type ["+e+"]")},getCurrentPageUrl:function(){try{var e=BrowserAgent.globals.sortedBucketList.length-1;return BrowserAgent.globals.sortedBucketList[e].bucket.json.url}catch(e){BrowserAgent.logger.error("getCurrentPageUrl: "+e.message)}return BrowserAgent.globals.initPageInfo.url},getPreviousPageUrl:function(){try{var e=BrowserAgent.globals.sortedBucketList.length-1;return BrowserAgent.globals.sortedBucketList[e].bucket.json.prevPage.url}catch(e){BrowserAgent.logger.error("getPreviousPageUrl: "+e.message)}},getReferrerUrl:function(){try{var e=BrowserAgent.globals.sortedBucketList.length-1;return BrowserAgent.globals.sortedBucketList[e].bucket.json.referrer.url}catch(e){BrowserAgent.logger.error("getReferrerUrl: "+e.message)}},replaceCurrentUrls:function(r,t,s){try{var o=BrowserAgent.globals.sortedBucketList.pop();try{void 0!==r&&(o.bucket.json.url=r,BrowserAgent.globals.initPageInfo.url=o.bucket.json.url,BrowserAgent.evtUtils.updatePageMetricPath(o))}catch(e){BrowserAgent.logger.error("Failed to replace the new page url: "+e.message)}try{void 0!==o.bucket.json.prevPage.url&&void 0!==t&&(o.bucket.json.prevPage.url=t)}catch(r){BrowserAgent.logger.error("Failed to replace the previous page url: "+e.message)}try{void 0!==o.bucket.json.referrer.url&&void 0!==s&&(o.bucket.json.referrer.url=s)}catch(e){BrowserAgent.logger.error("Failed to replace the referrer url: "+e.message)}BrowserAgent.globals.sortedBucketList.push(o)}catch(e){BrowserAgent.logger.error("replaceCurrentUrls: "+e.message)}},updatePageMetricPath:function(e){try{BrowserAgent.globals.initPageInfo.pageMetricPath=BrowserAgent.globals.metricPathConsts.PREFIX+BrowserAgent.globals.pipeChar;var r=BrowserAgent.browserUtils.parseURL(BrowserAgent.globals.initPageInfo.url);BrowserAgent.globals.bs===BrowserAgent.globals.UNDEFINED?BrowserAgent.globals.initPageInfo.pageMetricPath+=r.hostname+BrowserAgent.globals.forwardSlashChar+r.port+BrowserAgent.globals.pipeChar+r.pathname:BrowserAgent.globals.initPageInfo.pageMetricPath+=BrowserAgent.globals.bs+BrowserAgent.globals.pipeChar+BrowserAgent.globals.bt+BrowserAgent.globals.pipeChar+BrowserAgent.globals.btc+BrowserAgent.globals.pipeChar+BrowserAgent.globals.metricPathConsts.BROWSER,""!==r.hash&&(BrowserAgent.globals.initPageInfo.pageMetricPathNoHash=BrowserAgent.globals.initPageInfo.pageMetricPath,BrowserAgent.globals.initPageInfo.pageMetricPath+=BrowserAgent.globals.pipeChar+r.hash),e.bucket.pageMetricPath=BrowserAgent.globals.initPageInfo.pageMetricPath}catch(e){BrowserAgent.logger.error("updatePageMetricPath: "+e.message)}},truncateURL:function(e){BrowserAgent.globals.configs.ENABLE_TRUNCATE_URL&&e.url.includes(BrowserAgent.globals.configs.TRUNCATE_URL_VALUE)&&(BrowserAgent.logger.info("Initial URL of "+e.pageType+" event "+e.url),e.url=e.url.substring(0,e.url.indexOf(BrowserAgent.globals.configs.TRUNCATE_URL_VALUE,1)),BrowserAgent.logger.info("Truncated URL of "+e.pageType+" event "+e.url))},handleHPLoadEvt:function(e,r,t){if(!t)return!1;if(!e||!r||!BrowserAgent.globals.configs.PAGELOADMETRICSENABLED)return t.isDelete=!0,!1;if(r.pageLoadFlag=!0,!t.raw)return t.isDelete=!0,BrowserAgent.logger.warn("handleHPLoadEvt: Obtained invalid page load data point. Deleting it..."),!1;var s=t.raw.loadEventEnd-t.raw.navigationStart;if(s>=0&&s<BrowserAgent.globals.configs.PAGELOADMETRICSTHRESHOLD)return BrowserAgent.logger.info("handleHPLoadEvt: Skipping harvest of Page metrics for as it is below the configured Page metric threshold ("+BrowserAgent.globals.configs.PAGELOADMETRICSTHRESHOLD+" ms)"),t.isDelete=!0,!1;if(!r.businessService&&BrowserAgent.globals.configs.URLMETRICOFF)return BrowserAgent.logger.info("handleHPLoadEvt: Skipping harvest of Page metrics as URL metric context is DISABLED"),t.isDelete=!0,!1;var o=null;BrowserAgent.globals.initPageInfo.pageMetricPathNoHash&&(o=e,e=BrowserAgent.globals.initPageInfo.pageMetricPathNoHash),BrowserAgent.evtUtils.truncateURL(r);var n=t.raw.responseStart-t.raw.requestStart,a=[];if(BrowserAgent.browserUtils.shouldPopulateMetrics()&&(BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createMetric(e,BrowserAgent.globals.defaultMetricDefs.NTAPI_PRT.name,BrowserAgent.globals.defaultMetricDefs.NTAPI_PRT.unit,BrowserAgent.globals.defaultMetricDefs.NTAPI_PRT.type,t.raw.loadEventEnd-t.raw.domComplete),a),BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createMetric(e,BrowserAgent.globals.defaultMetricDefs.NTAPI_CET.name,BrowserAgent.globals.defaultMetricDefs.NTAPI_CET.unit,BrowserAgent.globals.defaultMetricDefs.NTAPI_CET.type,t.raw.connectEnd-t.raw.connectStart),a),BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createMetric(e,BrowserAgent.globals.defaultMetricDefs.NTAPI_DLT.name,BrowserAgent.globals.defaultMetricDefs.NTAPI_DLT.unit,BrowserAgent.globals.defaultMetricDefs.NTAPI_DLT.type,t.raw.domainLookupEnd-t.raw.domainLookupStart),a),BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createMetric(e,BrowserAgent.globals.defaultMetricDefs.NTAPI_DPT.name,BrowserAgent.globals.defaultMetricDefs.NTAPI_DPT.unit,BrowserAgent.globals.defaultMetricDefs.NTAPI_DPT.type,t.raw.domComplete-t.raw.domLoading),a),BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createMetric(e,BrowserAgent.globals.defaultMetricDefs.NTAPI_PLT.name,BrowserAgent.globals.defaultMetricDefs.NTAPI_PLT.unit,BrowserAgent.globals.defaultMetricDefs.NTAPI_PLT.type,s),a),BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createMetric(e,BrowserAgent.globals.defaultMetricDefs.NTAPI_PST.name,BrowserAgent.globals.defaultMetricDefs.NTAPI_PST.unit,BrowserAgent.globals.defaultMetricDefs.NTAPI_PST.type,t.raw.connectStart-t.raw.domainLookupEnd+t.raw.requestStart-t.raw.connectEnd),a),BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createMetric(e,BrowserAgent.globals.defaultMetricDefs.NTAPI_PPUT.name,BrowserAgent.globals.defaultMetricDefs.NTAPI_PPUT.unit,BrowserAgent.globals.defaultMetricDefs.NTAPI_PPUT.type,t.raw.unloadEventEnd-t.raw.unloadEventStart),a),BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createMetric(e,BrowserAgent.globals.defaultMetricDefs.NTAPI_TTFB.name,BrowserAgent.globals.defaultMetricDefs.NTAPI_TTFB.unit,BrowserAgent.globals.defaultMetricDefs.NTAPI_TTFB.type,n),a),BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createMetric(e,BrowserAgent.globals.defaultMetricDefs.NTAPI_TTLB.name,BrowserAgent.globals.defaultMetricDefs.NTAPI_TTLB.unit,BrowserAgent.globals.defaultMetricDefs.NTAPI_TTLB.type,t.raw.responseEnd-t.raw.requestStart),a),BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createMetric(e,BrowserAgent.globals.defaultMetricDefs.PAGE_HPI.name,BrowserAgent.globals.defaultMetricDefs.PAGE_HPI.unit,BrowserAgent.globals.defaultMetricDefs.PAGE_HPI.type,1),a),o&&(BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createMetric(o,BrowserAgent.globals.defaultMetricDefs.NTAPI_PLT.name,BrowserAgent.globals.defaultMetricDefs.NTAPI_PLT.unit,BrowserAgent.globals.defaultMetricDefs.NTAPI_PLT.type,s),a),BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createMetric(o,BrowserAgent.globals.defaultMetricDefs.PAGE_HPI.name,BrowserAgent.globals.defaultMetricDefs.PAGE_HPI.unit,BrowserAgent.globals.defaultMetricDefs.PAGE_HPI.type,1),a)),"undefined"!=typeof BrowserAgentExtension&&(BrowserAgentExtension.extAddCustomPageMetric(),BrowserAgentExtension.extCustomPageMetricList.length>0))){for(var g=0;g<BrowserAgentExtension.extCustomPageMetricList.length;g++){var i=BrowserAgentExtension.extCustomPageMetricList[g];BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createMetric(e,i.name,i.unit,i.accumulatorType,i.value),a)}BrowserAgentExtension.extCustomPageMetricList=[]}var l=a.length>0?a[0].path:e,A=[];BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createTT(l,BrowserAgent.globals.CorBrowsGUID,t.raw.navigationStart,parseInt(BrowserAgent.globals.startTime),s,n,t.raw.responseStart,parseInt(BrowserAgent.globals.endTime),t.bucketId),A);var B,w=!1,c=BrowserAgent.jsonUtils.createAPMData(a,A),u=BrowserAgent.jsonUtils.createAXAData(t[BrowserAgent.globals.trackerDataKey]);if(r.rawData={navigationTiming:BrowserAgent.browserUtils.copyObj(t.raw)},r.rawData&&r.rawData.navigationTiming&&(B=BrowserAgent.jsonUtils.createAUTOAXAData(r,!1,r.rawData.navigationTiming.fetchStart,r.rawData.navigationTiming.loadEventEnd)),BrowserAgent.globals.isSyntheticData&&(BrowserAgent.globals.eumJSONShell.app.isSynthetic=BrowserAgent.globals.isSyntheticData),BrowserAgent.globals.agentCookies){var p=BrowserAgent.jsonUtils.createInternalData(BrowserAgent.globals.agentCookies,BrowserAgent.globals.agentCookieKeyName);p&&(BrowserAgent.globals.CorBrowsGUID&&(p.correlationBrowserGUID=BrowserAgent.globals.CorBrowsGUID),t.bucketId&&(p.bucketId=t.bucketId),r.internalData=p)}return c&&(r.apmData=c,w=!0),u?(r.axaData=u,w=!0):B&&(r.axaData=B,w=!0),w},handleSPLoadEvt:function(e,r,t){if(!t)return!1;if(!e||!r||!BrowserAgent.globals.configs.PAGELOADMETRICSENABLED)return t.isDelete=!0,!1;if(r.pageLoadFlag=!0,!t[BrowserAgent.globals.softPageDataKeys.START]||!t[BrowserAgent.globals.softPageDataKeys.END])return t.isDelete=!0,BrowserAgent.logger.warn("handleSPLoadEvt: Obtained invalid page load data point. Deleting it..."),!1;var s=t[BrowserAgent.globals.softPageDataKeys.END]-t[BrowserAgent.globals.softPageDataKeys.START];if(s>=0&&s<BrowserAgent.globals.configs.PAGELOADMETRICSTHRESHOLD)return BrowserAgent.logger.info("handleSPLoadEvt: Skipping harvest of Soft Page metrics for as it is below the configured Page metric threshold ("+BrowserAgent.globals.configs.PAGELOADMETRICSTHRESHOLD+" ms)"),t.isDelete=!0,!1;if(!r.businessService&&BrowserAgent.globals.configs.URLMETRICOFF)return BrowserAgent.logger.info("handleSPLoadEvt: Skipping harvest of Page metrics as URL metric context is DISABLED"),t.isDelete=!0,!1;if(BrowserAgent.evtUtils.truncateURL(r),r.rawData={softPageTiming:{startTime:t[BrowserAgent.globals.softPageDataKeys.START],endTime:t[BrowserAgent.globals.softPageDataKeys.END]}},BrowserAgent.browserUtils.shouldPopulateMetrics()){var o=[];BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createMetric(e,BrowserAgent.globals.defaultMetricDefs.NTAPI_PLT.name,BrowserAgent.globals.defaultMetricDefs.NTAPI_PLT.unit,BrowserAgent.globals.defaultMetricDefs.NTAPI_PLT.type,s),o),BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createMetric(e,BrowserAgent.globals.defaultMetricDefs.PAGE_HPI.name,BrowserAgent.globals.defaultMetricDefs.PAGE_HPI.unit,BrowserAgent.globals.defaultMetricDefs.PAGE_HPI.type,1),o);var n=o.length>0?o[0].path:e,a=[];BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createTT(n,null,r.rawData.softPageTiming.startTime,r.rawData.softPageTiming.startTime,s,null,null,null,t.bucketId),a);var g=BrowserAgent.jsonUtils.createAPMData(o,a);g&&(r.apmData=g)}var i,l=BrowserAgent.jsonUtils.createAXAData(t[BrowserAgent.globals.trackerDataKey]);return r.rawData&&r.rawData.softPageTiming&&(i=BrowserAgent.jsonUtils.createAUTOAXAData(r,!1,r.rawData.softPageTiming.startTime,r.rawData.softPageTiming.endTime)),r.axaData=l||i,!0},handleResEvt:function(e,r,t){if(!t)return!1;if(!e||!r||!BrowserAgent.evtUtils.isValidResEvt(t)||!BrowserAgent.globals.configs.AJAXMETRICSENABLED&&!t[BrowserAgent.globals.RAW_RESOURCE_TIME_DATA])return BrowserAgent.logger.warn("handleResEvt: Obtained invalid AJAX data point or AJAX metrics are DISABLED. Deleting it..."),t.isDelete=!0,!1;BrowserAgent.evtUtils.truncateURL(r);var s=BrowserAgent.browserUtils.parseURL(t.url).pathname;if(t&&BrowserAgent.globals.fetchHeaderData.length>0&&BrowserAgent.globals.fetchReqUrl.length>0&&BrowserAgent.globals.fetchReqUrl.includes(t.url)){var o=BrowserAgent.globals.fetchHeaderData.shift();BrowserAgent.cookieUtils.updateHPDataObjWithCookieData(BrowserAgent.cookieUtils.tokenizeCookieIntoMap(decodeURIComponent(o),",")),(BrowserAgent.browserUtils.getLastSegmentFromPathname(s).includes("graphql")||BrowserAgent.browserUtils.getLastSegmentFromPathname(s).includes("gql"))&&(t[BrowserAgent.globals.isGrphqlResp]=!0),t[BrowserAgent.cookieUtils.cookieKeys.CorBrowsGUIDChar]=BrowserAgent.globals.CorBrowsGUID,t[BrowserAgent.cookieUtils.cookieKeys.apmStartTimeChar]=BrowserAgent.globals.startTime,t[BrowserAgent.cookieUtils.cookieKeys.apmEndTimeChar]=BrowserAgent.globals.endTime}var n=t[BrowserAgent.globals.timestampNames.CALLBACK_END_TIME]-t[BrowserAgent.globals.timestampNames.CALLBACK_START_TIME];n>0&&t[BrowserAgent.globals.timestampNames.LAST_BYTE]>0&&t[BrowserAgent.globals.timestampNames.CALLBACK_START_TIME]<t[BrowserAgent.globals.timestampNames.LAST_BYTE]?(t[BrowserAgent.globals.timestampNames.CALLBACK_START_TIME]=t[BrowserAgent.globals.timestampNames.LAST_BYTE],t[BrowserAgent.globals.timestampNames.CALLBACK_END_TIME]=n+t[BrowserAgent.globals.timestampNames.CALLBACK_START_TIME]):0===t[BrowserAgent.globals.timestampNames.CALLBACK_START_TIME]&&t[BrowserAgent.globals.timestampNames.LAST_BYTE]>0&&t[BrowserAgent.globals.timestampNames.CALLBACK_END_TIME]>0&&((n=t[BrowserAgent.globals.timestampNames.CALLBACK_END_TIME]-t[BrowserAgent.globals.timestampNames.LAST_BYTE])>0?t[BrowserAgent.globals.timestampNames.CALLBACK_START_TIME]=t[BrowserAgent.globals.timestampNames.LAST_BYTE]:(t[BrowserAgent.globals.timestampNames.CALLBACK_START_TIME]=0,t[BrowserAgent.globals.timestampNames.CALLBACK_END_TIME]=0,n=0));var a=null,g=t[BrowserAgent.globals.RAW_RESOURCE_TIME_DATA];if(void 0===g||null===g){var i=BrowserAgent.globals.urlToPerformanceListMap[t[BrowserAgent.globals.ajaxDataKeys.URL]];if(i){var l=t[BrowserAgent.globals.timestampNames.REQUEST_START],A=BrowserAgent.evtUtils.determineBestMatchIndex(i,l);null!==(a=BrowserAgent.evtUtils.getCorrelatePerfTimingObject(A,i,t))&&BrowserAgent.evtUtils.adjustAPMMetricsForPerfObject(a,t,n)}}var B=t[BrowserAgent.globals.timestampNames.CALLBACK_END_TIME]-t[BrowserAgent.globals.timestampNames.REQUEST_START];if(B>=0&&B<BrowserAgent.globals.configs.AJAXMETRICSTHRESHOLD&&!t[BrowserAgent.globals.RAW_RESOURCE_TIME_DATA])return BrowserAgent.logger.info("handleResEvt: Skipping harvest of ajax metrics for "+t[BrowserAgent.globals.ajaxDataKeys.URL]+" as it is below the configured ajax metric threshold"),t.isDelete=!0,!1;var w=t[BrowserAgent.cookieUtils.cookieKeys.bsChar]&&t[BrowserAgent.cookieUtils.cookieKeys.bsChar]!==BrowserAgent.globals.UNDEFINED;if(!w&&!r.businessService&&BrowserAgent.globals.configs.URLMETRICOFF)return BrowserAgent.logger.info("handleResEvt: Skipping harvest of AJAX metrics as NON-BT based metrics are OFF"),t.isDelete=!0,!1;w&&(e=BrowserAgent.globals.metricPathConsts.PREFIX+BrowserAgent.globals.pipeChar+t[BrowserAgent.cookieUtils.cookieKeys.bsChar]+BrowserAgent.globals.pipeChar+t[BrowserAgent.cookieUtils.cookieKeys.btChar]+BrowserAgent.globals.pipeChar+t[BrowserAgent.cookieUtils.cookieKeys.btcChar]+BrowserAgent.globals.pipeChar+BrowserAgent.globals.metricPathConsts.BROWSER);var c=BrowserAgent.jsonUtils.createBS(t[BrowserAgent.cookieUtils.cookieKeys.bsChar],t[BrowserAgent.cookieUtils.cookieKeys.btChar],t[BrowserAgent.cookieUtils.cookieKeys.btcChar]),u=BrowserAgent.browserUtils.parseURL(t[BrowserAgent.globals.ajaxDataKeys.URL]),p=u.hostname+BrowserAgent.globals.forwardSlashChar+u.port+BrowserAgent.globals.pipeChar+u.pathname,f=t[BrowserAgent.globals.timestampNames.FIRST_BYTE]-t[BrowserAgent.globals.timestampNames.REQUEST_START],d=t[BrowserAgent.globals.timestampNames.LAST_BYTE]-t[BrowserAgent.globals.timestampNames.FIRST_BYTE],E=e;e+=BrowserAgent.globals.pipeChar+BrowserAgent.globals.metricPathConsts.RES+BrowserAgent.globals.pipeChar;var m,b;switch(t[BrowserAgent.globals.ajaxDataKeys.ASYNC]){case!0:m=BrowserAgent.globals.resourceType.AJAX,b=BrowserAgent.globals.resourceSubType.ASYNC,e+=BrowserAgent.globals.metricPathConsts.AJAX+BrowserAgent.globals.pipeChar+BrowserAgent.globals.metricPathConsts.ASYNC;break;case!1:m=BrowserAgent.globals.resourceType.AJAX,b=BrowserAgent.globals.resourceSubType.SYNC,e+=BrowserAgent.globals.metricPathConsts.AJAX+BrowserAgent.globals.pipeChar+BrowserAgent.globals.metricPathConsts.SYNC;break;default:m=BrowserAgent.globals.resourceType.HTMLRES,e+=BrowserAgent.globals.metricPathConsts.HTMLRES}e+=BrowserAgent.globals.pipeChar+p;var S=[];BrowserAgent.browserUtils.shouldPopulateMetrics()&&(BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createMetric(e,BrowserAgent.globals.defaultMetricDefs.AJAX_RLT.name,BrowserAgent.globals.defaultMetricDefs.AJAX_RLT.unit,BrowserAgent.globals.defaultMetricDefs.AJAX_RLT.type,B),S),f>=0&&BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createMetric(e,BrowserAgent.globals.defaultMetricDefs.AJAX_TTFB.name,BrowserAgent.globals.defaultMetricDefs.AJAX_TTFB.unit,BrowserAgent.globals.defaultMetricDefs.AJAX_TTFB.type,f),S),d>=0&&BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createMetric(e,BrowserAgent.globals.defaultMetricDefs.AJAX_RDT.name,BrowserAgent.globals.defaultMetricDefs.AJAX_RDT.unit,BrowserAgent.globals.defaultMetricDefs.AJAX_RDT.type,d),S),n>=0&&BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createMetric(e,BrowserAgent.globals.defaultMetricDefs.AJAX_CBET.name,BrowserAgent.globals.defaultMetricDefs.AJAX_CBET.unit,BrowserAgent.globals.defaultMetricDefs.AJAX_CBET.type,n),S),BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createMetric(e,BrowserAgent.globals.defaultMetricDefs.AJAX_ICPI.name,BrowserAgent.globals.defaultMetricDefs.AJAX_ICPI.unit,BrowserAgent.globals.defaultMetricDefs.AJAX_ICPI.type,1),S));var T=S.length>0?S[0].path:e,h=[];BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createTT(T,t[BrowserAgent.cookieUtils.cookieKeys.CorBrowsGUIDChar],t[BrowserAgent.globals.timestampNames.REQUEST_START],parseInt(t[BrowserAgent.cookieUtils.cookieKeys.apmStartTimeChar]),B,f,t[BrowserAgent.globals.timestampNames.FIRST_BYTE],parseInt(t[BrowserAgent.cookieUtils.cookieKeys.apmEndTimeChar]),t.bucketId),h),t&&t[BrowserAgent.globals.ajaxDataKeys.URL]&&(h[0].x_attributes&&h[0].x_attributes.x_attributeList||(h[0].x_attributes=h[0].x_attributes?h[0].x_attributes:{},h[0].x_attributes.x_attributeList=h[0].x_attributes.x_attributeList?h[0].x_attributes.x_attributeList:[]),BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createURLXAttribute(t[BrowserAgent.globals.ajaxDataKeys.URL]),h[0].x_attributes.x_attributeList)),h[0].x_attributes.x_attributeList.push(BrowserAgent.jsonUtils.createXAttribute("TTPlugin.globalAttribute.AXAAppName",BrowserAgent.globals.appInfo.id)),h[0].x_attributes.x_attributeList.push(BrowserAgent.jsonUtils.createXAttribute(BrowserAgent.globals.isSynthetic,BrowserAgent.globals.isSynthetic));var U,R,v,P=t[BrowserAgent.globals.ajaxDataKeys.ERR];P&&BrowserAgent.configUtils.isErrorExcluded(t[BrowserAgent.globals.ajaxDataKeys.URL],P[BrowserAgent.errorUtils.errorDataFields.SUB])?BrowserAgent.logger.warn("handleResEvt: Resource ["+t[BrowserAgent.globals.ajaxDataKeys.URL]+"] and error message ["+P[BrowserAgent.errorUtils.errorDataFields.SUB]+"] has been excluded"):P&&(v=BrowserAgent.jsonUtils.createMetric(e,BrowserAgent.globals.defaultMetricDefs.RES_EPI.name,BrowserAgent.globals.defaultMetricDefs.RES_EPI.unit,BrowserAgent.globals.defaultMetricDefs.RES_EPI.type,1),R=BrowserAgent.jsonUtils.createAPMData([v],null),U=BrowserAgent.jsonUtils.createError(P[BrowserAgent.errorUtils.errorDataFields.TYP],P[BrowserAgent.errorUtils.errorDataFields.SUB],P[BrowserAgent.errorUtils.errorDataFields.MSG],null,null,null,P[BrowserAgent.errorUtils.errorDataFields.STK],P[BrowserAgent.errorUtils.errorDataFields.STT],R,null));var I=BrowserAgent.jsonUtils.createAXAData(t[BrowserAgent.globals.trackerDataKey]);I||m!==BrowserAgent.globals.resourceType.AJAX||(I=BrowserAgent.jsonUtils.createAUTOAXAData(r,!0,t.rs,t.ce)),null===I&&t[BrowserAgent.globals.isGrphqlResp]&&(I=BrowserAgent.jsonUtils.createAUTOAXAData(r,!0,t.rs,t.ce));var C=BrowserAgent.jsonUtils.createResource(m,b,t[BrowserAgent.globals.timestampNames.REQUEST_START],c,BrowserAgent.jsonUtils.createAPMData(S,h),BrowserAgent.jsonUtils.createRequest(t[BrowserAgent.globals.ajaxDataKeys.URL],t[BrowserAgent.globals.ajaxDataKeys.METHOD],t[BrowserAgent.globals.ajaxDataKeys.REQUEST_BODY_SIZE]),BrowserAgent.jsonUtils.createResponse(t[BrowserAgent.globals.ajaxDataKeys.STATUS_CODE],t[BrowserAgent.globals.ajaxDataKeys.STATUS_TEXT],BrowserAgent.jsonUtils.createContent(t[BrowserAgent.globals.ajaxDataKeys.RESPONSE_CONTENT_LENGTH])),U,I),N=BrowserAgent.globals.agentCookieKeys;if(t[N]){var L=BrowserAgent.jsonUtils.createInternalData(t[N],BrowserAgent.globals.agentCookieKeyName);L&&(C.internalData=L)}if(I&&t[BrowserAgent.globals.isGrphqlResp]&&BrowserAgent.globals.agentCookies){var y=BrowserAgent.jsonUtils.createInternalData(BrowserAgent.globals.agentCookies,BrowserAgent.globals.agentCookieKeyName);y&&(BrowserAgent.globals.CorBrowsGUID&&(y.correlationBrowserGUID=BrowserAgent.globals.CorBrowsGUID),t.bucketId&&(y.bucketId=t.bucketId),C.internalData=y)}if(C){if(r.resources||(r.resources={resourceList:[]}),BrowserAgent.globals.isSyntheticData&&(BrowserAgent.globals.eumJSONShell.app.isSynthetic=BrowserAgent.globals.isSyntheticData),void 0!==(g=t[BrowserAgent.globals.RAW_RESOURCE_TIME_DATA])&&null!==g)if(g.performanceResourceTiming.encodedBodySize&&g.performanceResourceTiming.encodedBodySize>BrowserAgent.globals.maxLongValue){var O=BrowserAgent.evtUtils.getCorrelatePerfTimingObject(0,g.performanceResourceTiming,t);void 0!==O&&null!==O&&(C.rawData=O)}else C.rawData=g;else a&&(C.rawData=a),C.rawData||(C.rawData=BrowserAgent.evtUtils.getSpoofTimingPerfTimingObject(t,B)),BrowserAgent.evtUtils.addCBET(C,t,n);return r.resources.resourceList.push(C),C.error&&(r.resources.resErrCount?r.resources.resErrCount+=1:r.resources.resErrCount=1,r.resources.pageMetricPath||(r.resources.pageMetricPath=E)),!0}return!1},determineBestMatchIndex:function(e,r){var t=-1;if(0===e.length)return t;var s=Number.MAX_VALUE,o=BrowserAgent.browserUtils.binarySearchByPropCompare(e,r,BrowserAgent.globals.REQUEST_START_PROP_NAME);if(o>=0)t=o,s=0;else if(o<0)if(0===(o+=1))t=o,s=e[0].requestStart-r;else if(o<0){var n=-1*o,a=Number.MAX_VALUE;n<e.length&&(a=e[n].requestStart-r);var g=r-e[n-1].requestStart;a<g?(t=n,s=a):(t=n-1,s=g)}return s>BrowserAgent.globals.PERF_OBJ_CORR_MAX_ALLOWED_SPREAD&&(BrowserAgent.logger.info("determineBestMatchIndex : For resource "+e[t].perfObj.name+" spread "+s+" is greater than threshold "+BrowserAgent.globals.PERF_OBJ_CORR_MAX_ALLOWED_SPREAD),t=-1),t},getCorrelatePerfTimingObject:function(e,r,t){var s=null;if(e>=0){var o=null;(s={performanceResourceTiming:{name:(o=r[e]?r[e].perfObj:r).name?o.name:"",entryType:o.entryType?o.entryType:"",startTime:o.startTime?Math.ceil(o.startTime):0,duration:o.duration?Math.ceil(o.duration):0,initiatorType:o.initiatorType?o.initiatorType:"",nextHopProtocol:o.nextHopProtocol?o.nextHopProtocol:"",workerStart:o.workerStart?Math.ceil(o.workerStart):0,redirectStart:o.redirectStart?Math.ceil(o.redirectStart):0,redirectEnd:o.redirectEnd?Math.ceil(o.redirectEnd):0,fetchStart:o.fetchStart?Math.ceil(o.fetchStart):0,domainLookupStart:o.domainLookupStart?Math.ceil(o.domainLookupStart):0,domainLookupEnd:o.domainLookupEnd?Math.ceil(o.domainLookupEnd):0,connectStart:o.connectStart?Math.ceil(o.connectStart):0,connectEnd:o.connectEnd?Math.ceil(o.connectEnd):0,secureConnectionStart:o.secureConnectionStart?Math.ceil(o.secureConnectionStart):0,requestStart:o.requestStart?Math.ceil(o.requestStart):0,responseStart:o.responseStart?Math.ceil(o.responseStart):0,responseEnd:o.responseEnd?Math.ceil(o.responseEnd):0,transferSize:o.transferSize?o.transferSize:0,encodedBodySize:o.encodedBodySize&&o.encodedBodySize<BrowserAgent.globals.maxLongValue?o.encodedBodySize:0,decodedBodySize:o.decodedBodySize?o.decodedBodySize:0}}).performanceResourceTiming.duration=s.performanceResourceTiming.responseEnd-s.performanceResourceTiming.startTime,r[e]&&(r.splice(e,1),BrowserAgent.globals.currentPerfObjectCount-=1,0===r.length&&delete BrowserAgent.globals.urlToPerformanceListMap[t[BrowserAgent.globals.ajaxDataKeys.URL]])}return s},adjustAPMMetricsForPerfObject:function(e,r,t){if(null!==e){var s=e.performanceResourceTiming.startTime;0===s&&0===(s=e.performanceResourceTiming.fetchStart)&&0===(s=e.performanceResourceTiming.requestStart)&&(s=r[BrowserAgent.globals.timestampNames.REQUEST_START]),s!==r[BrowserAgent.globals.timestampNames.REQUEST_START]&&(s+=performance.timing.navigationStart),r[BrowserAgent.globals.timestampNames.REQUEST_START]=s,r[BrowserAgent.globals.timestampNames.FIRST_BYTE]=e.performanceResourceTiming.responseStart>0?e.performanceResourceTiming.responseStart+performance.timing.navigationStart:r[BrowserAgent.globals.timestampNames.FIRST_BYTE],r[BrowserAgent.globals.timestampNames.LAST_BYTE]=e.performanceResourceTiming.responseEnd>0?e.performanceResourceTiming.responseEnd+performance.timing.navigationStart:r[BrowserAgent.globals.timestampNames.LAST_BYTE];var o=0;t>0?(o=e.performanceResourceTiming.responseEnd+performance.timing.navigationStart,r[BrowserAgent.globals.timestampNames.CALLBACK_START_TIME]=o,r[BrowserAgent.globals.timestampNames.CALLBACK_END_TIME]=t+o):r[BrowserAgent.globals.timestampNames.CALLBACK_END_TIME]>0&&(o=e.performanceResourceTiming.responseEnd+performance.timing.navigationStart,r[BrowserAgent.globals.timestampNames.CALLBACK_END_TIME]<o&&(r[BrowserAgent.globals.timestampNames.CALLBACK_END_TIME]=o))}},getSpoofTimingPerfTimingObject:function(e,r){var t=e[BrowserAgent.globals.timestampNames.REQUEST_START]-performance.timing.navigationStart,s=0;e[BrowserAgent.globals.timestampNames.FIRST_BYTE]>0&&(s=e[BrowserAgent.globals.timestampNames.FIRST_BYTE]-performance.timing.navigationStart);var o=0;e[BrowserAgent.globals.timestampNames.LAST_BYTE]>0&&(o=e[BrowserAgent.globals.timestampNames.LAST_BYTE]-performance.timing.navigationStart);var n={performanceResourceTiming:{startTime:t,name:e[BrowserAgent.globals.ajaxDataKeys.URL],entryType:"resource",duration:r,requestStart:t,responseStart:s,responseEnd:o}};return e[BrowserAgent.globals.ajaxDataKeys.RESPONSE_CONTENT_LENGTH]&&(n.performanceResourceTiming.decodedBodySize=e[BrowserAgent.globals.ajaxDataKeys.RESPONSE_CONTENT_LENGTH]),n},addCBET:function(e,r,t){if(null!==e.rawData&&null!==e.rawData.performanceResourceTiming&&(t>0?(e.rawData.performanceResourceTiming.callbackExecutionTimeStart=r[BrowserAgent.globals.timestampNames.CALLBACK_START_TIME]-performance.timing.navigationStart,e.rawData.performanceResourceTiming.callbackExecutionTimeEnd=r[BrowserAgent.globals.timestampNames.CALLBACK_END_TIME]-performance.timing.navigationStart):r[BrowserAgent.globals.timestampNames.CALLBACK_END_TIME]>0&&(e.rawData.performanceResourceTiming.callbackExecutionTimeEnd=r[BrowserAgent.globals.timestampNames.CALLBACK_END_TIME]-performance.timing.navigationStart),e.rawData.performanceResourceTiming.callbackExecutionTimeEnd>0)){var s=e.rawData.performanceResourceTiming.callbackExecutionTimeEnd-e.rawData.performanceResourceTiming.startTime;e.rawData.performanceResourceTiming.duration=s}},purgeOldPerfObjects:function(){var e=BrowserAgent.globals.currentPerfObjectCount;if(BrowserAgent.globals.currentPerfObjectCount>BrowserAgent.globals.MAX_PERF_OBJECT_CACHE_LIMIT){BrowserAgent.logger.info("purgeOldPerfObjects : called current object count "+BrowserAgent.globals.currentPerfObjectCount+" exceeds threshold "+BrowserAgent.globals.MAX_PERF_OBJECT_CACHE_LIMIT);var r,t=BrowserAgentBootstrap.origFuncMap.timeNow()-3e5;for(r in BrowserAgent.globals.urlToPerformanceListMap){for(var s=BrowserAgent.globals.urlToPerformanceListMap[r],o=0;s&&o<s.length;o++)s[o].requestStart<=t&&(s.splice(o,1),BrowserAgent.globals.currentPerfObjectCount-=1);0===s.length&&delete BrowserAgent.globals.urlToPerformanceListMap[r]}BrowserAgent.logger.info("purgeOldPerfObjects : removed "+(e-BrowserAgent.globals.currentPerfObjectCount)+" expired cached object(s)")}},handleJSErrEvt:function(e,r,t){if(!t)return!1;if(!e||!r||!BrowserAgent.globals.configs.JSERRORSENABLED)return t.isDelete=!0,!1;if("string"!=typeof t[BrowserAgent.errorUtils.errorDataFields.MSG]||"number"!=typeof t[BrowserAgent.errorUtils.errorDataFields.STT])return BrowserAgent.logger.info("handleJSErrEvt: Obtained an invalid JS error data point. Deleting it..."),t.isDelete=!0,!1;if(!r.businessService&&BrowserAgent.globals.configs.URLMETRICOFF)return BrowserAgent.logger.info("handleJSErrEvt: Skipping harvest of JS error metrics as NON-BT based metrics are OFF"),t.isDelete=!0,!1;var s,o,n;if(BrowserAgent.browserUtils.shouldPopulateMetrics()){var a=BrowserAgent.jsonUtils.createMetric(e,BrowserAgent.globals.defaultMetricDefs.PAGE_EPI.name,BrowserAgent.globals.defaultMetricDefs.PAGE_EPI.unit,BrowserAgent.globals.defaultMetricDefs.PAGE_EPI.type,1);a&&(o=BrowserAgent.jsonUtils.createAPMData([a],null))}return n=BrowserAgent.jsonUtils.createAXAData(t[BrowserAgent.globals.trackerDataKey]),!!(s=BrowserAgent.jsonUtils.createError(t[BrowserAgent.errorUtils.errorDataFields.TYP],t[BrowserAgent.errorUtils.errorDataFields.SUB],t[BrowserAgent.errorUtils.errorDataFields.MSG],t[BrowserAgent.errorUtils.errorDataFields.SRC],t[BrowserAgent.errorUtils.errorDataFields.LIN],t[BrowserAgent.errorUtils.errorDataFields.COL],t[BrowserAgent.errorUtils.errorDataFields.STK],t[BrowserAgent.errorUtils.errorDataFields.STT],o,n))&&(r.errors||(r.errors={errorList:[]}),r.errors.errorList.push(s),!0)},handleFnEvt:function(e,r,t){if(!t)return!1;if(!e||!r||!BrowserAgent.globals.configs.JSFUNCTIONMETRICSENABLED)return t.isDelete=!0,!1;if(!t[BrowserAgent.globals.timestampNames.START_TIME]||!t[BrowserAgent.globals.timestampNames.REQUEST_START]||!t.fnName)return BrowserAgent.logger.warn("handleFnEvt: Obtained invalid JS Function data point. Deleting it..."),t.isDelete=!0,!1;if(!r.businessService&&BrowserAgent.globals.configs.URLMETRICOFF)return BrowserAgent.logger.info("handleFnEvt: Skipping harvest of JS Function metrics as NON-BT based metrics are OFF"),t.isDelete=!0,!1;BrowserAgent.evtUtils.truncateURL(r);var s=t[BrowserAgent.globals.timestampNames.REQUEST_START]-t[BrowserAgent.globals.timestampNames.START_TIME];if(s>=0&&s<BrowserAgent.globals.configs.JSFUNCTIONMETRICSTHRESHOLD)return BrowserAgent.logger.info("handleFnEvt: Skipping harvest of JS function metrics for "+t.fnName+" as it is below the configured JS Function metric threshold"),t.isDelete=!0,!1;e+=BrowserAgent.globals.pipeChar+BrowserAgent.globals.metricPathConsts.FUNC+BrowserAgent.globals.pipeChar+t.fnName;var o=[];BrowserAgent.browserUtils.shouldPopulateMetrics()&&(o.push(BrowserAgent.jsonUtils.createMetric(e,BrowserAgent.globals.defaultMetricDefs.FUNC_ET.name,BrowserAgent.globals.defaultMetricDefs.FUNC_ET.unit,BrowserAgent.globals.defaultMetricDefs.FUNC_ET.type,s)),o.push(BrowserAgent.jsonUtils.createMetric(e,BrowserAgent.globals.defaultMetricDefs.FUNC_ICPI.name,BrowserAgent.globals.defaultMetricDefs.FUNC_ICPI.unit,BrowserAgent.globals.defaultMetricDefs.FUNC_ICPI.type,1)));var n=BrowserAgent.jsonUtils.createAPMData(o,null);if(!n)return!1;var a={timeStamp:t[BrowserAgent.globals.timestampNames.START_TIME],apmData:n},g=BrowserAgent.jsonUtils.createAXAData(t[BrowserAgent.globals.trackerDataKey]);return g&&(a.axaData=g),!!a&&(r.clientEvents||(r.clientEvents={clientEventList:[]}),r.clientEvents.clientEventList.push(a),!0)},handleAPMExtEvt:function(e,r,t){if(!t)return!1;if(!e||!r||!BrowserAgent.globals.configs.BROWSERAGENTENABLED)return t.isDelete=!0,!1;if(!t.lst||t.lst.length<1)return BrowserAgent.logger.info("handleAPMExtEvt: Obtained invalid APM extension metrics list. Deleting it..."),t.isDelete=!0,!1;if(!r.businessService&&BrowserAgent.globals.configs.URLMETRICOFF)return BrowserAgent.logger.info("handleAPMExtEvt: Skipping harvest of APM extension metrics as NON-BT based metrics are OFF"),t.isDelete=!0,!1;if(BrowserAgent.browserUtils.shouldPopulateMetrics()){var s=BrowserAgent.jsonUtils.createAPMData(t.lst,null);if(!s)return!1;var o={apmData:s};if(o)return r.extensions||(r.extensions={extensionList:[]}),r.extensions.extensionList.push(o),!0}return!1},handleAXAExtEvt:function(e,r,t){return!!t&&(e&&r&&BrowserAgent.globals.configs.BROWSERAGENTENABLED?!t.d||t.d.length<1?(BrowserAgent.logger.info("handleAXAExtEvt: Obtained invalid AXA extension data. Deleting it..."),t.isDelete=!0,!1):(r.axaData||(r.axaData={axaEventList:[]}),r.axaData.axaEventList.push(t.d),!0):(t.isDelete=!0,!1))},handleTTimeEvt:function(e,r,t){if(!t)return!1;if(!e||!r||!BrowserAgent.globals.configs.BROWSERAGENTENABLED)return t.isDelete=!0,!1;if(!t.s||!t.e||t.e<t.s)return BrowserAgent.logger.info("handleTTimeEvt: Obtained invalid think time data. Deleting it..."),t.isDelete=!0,!1;if(!r.businessService&&BrowserAgent.globals.configs.URLMETRICOFF)return BrowserAgent.logger.info("handleTTimeEvt: Skipping harvest of think time metric(s) as NON-BT based metrics are OFF"),t.isDelete=!0,!1;BrowserAgent.evtUtils.truncateURL(r);var s={desc:"pageThinkTime",startTime:t.s,endTime:t.e};if(BrowserAgent.browserUtils.shouldPopulateMetrics()){var o=BrowserAgent.jsonUtils.createMetric(e,BrowserAgent.globals.defaultMetricDefs.PAGE_UDT.name,BrowserAgent.globals.defaultMetricDefs.PAGE_UDT.unit,BrowserAgent.globals.defaultMetricDefs.PAGE_UDT.type,t.e-t.s);if(!o)return!1;var n=BrowserAgent.jsonUtils.createAPMData([o],null);if(!n)return!1;s.apmData=n}var a=BrowserAgent.jsonUtils.createAXAData(t[BrowserAgent.globals.trackerDataKey]);return a&&(s.axaData=a),!!s&&(r.thinkTimes||(r.thinkTimes={thinkTimeList:[]}),r.thinkTimes.thinkTimeList.push(s),!0)},harvestEvts:function(){var e=performance.now(),r=BrowserAgent.evtUtils.resourceTimingHarvest(),t=performance.now(),s=t-e;BrowserAgent.globals.selfMonPerformance.resource.numberOfRes+=r,BrowserAgent.globals.selfMonPerformance.resource.totalTimeMS+=s,BrowserAgent.globals.selfMonPerformance.resource.numberOfRes>0&&(BrowserAgent.globals.selfMonPerformance.resource.avgTimePerResMS=BrowserAgent.globals.selfMonPerformance.resource.totalTimeMS/BrowserAgent.globals.selfMonPerformance.resource.numberOfRes),e=performance.now(),BrowserAgent.evtUtils.resourceTimingHarvest();var o,n,a,g,i,l,A=!1,B=0;for(o in BrowserAgent.globals.pageWithEventsMap)if(i=!1,void 0!==(n=BrowserAgent.globals.pageBucketsMap[o])){g=BrowserAgentBootstrap.origFuncMap.jsonParse(BrowserAgent.jsonStringify(n.json));for(a in n.evtMap)if(n.evtMap[a].isDone||n.evtMap[a].isDelete)if(n.evtMap[a].isDelete||BrowserAgent.evtUtils.isClamped(BrowserAgent.evtUtils.evtClampFlags.SND.type,B,BrowserAgent.globals.configs.EVENTDISPATCHCLAMPPERINTERVAL))delete n.evtMap[a],n.evtCount-=1;else{var w=n.evtMap[a].type;if(!g[BrowserAgent.globals.pageLoadFlag]&&w==BrowserAgent.globals.evtTypes.RES){var c=BrowserAgent.cookieUtils.cookies.BTPAGERESP,u=BrowserAgent.browserUtils.getLastSegmentFromPathname(window.location.pathname);u&&(c+="-"+encodeURIComponent(u));var p=BrowserAgent.cookieUtils.getRawCookie(c);p||(c=BrowserAgent.cookieUtils.cookies.BTPAGERESP,c+="-"+encodeURIComponent(window.location.pathname),p=BrowserAgent.cookieUtils.getRawCookie(c)),BrowserAgent.cookieUtils.deleteCookie(c,"/",null),BrowserAgent.evtUtils.prepareDataObjForGraphqlResponse(n.evtMap[a],p)}BrowserAgent.globals.fetchGlobalSyntheticFlag();var f=w?BrowserAgent.globals.evtHandlers[w]:null;f&&(l=f(n.pageMetricPath,g,n.evtMap[a])),l&&(B+=1),i=l||i,delete n.evtMap[a],n.evtCount-=1}if(n.evtCount<1&&delete BrowserAgent.globals.pageWithEventsMap[o],!0===n.newPage&&!0===BrowserAgent.globals.configs.COOKIECAPTUREENABLED){var d=BrowserAgent.jsonUtils.createCookies(BrowserAgent.cookieUtils.getAppCookies());d&&(g.cookies=d,i=!0),n.newPage=!1}if(g.resources&&g.resources.resErrCount>=1){var E=BrowserAgent.jsonUtils.createMetric(g.resources.pageMetricPath,BrowserAgent.globals.defaultMetricDefs.PAGE_EPI.name,BrowserAgent.globals.defaultMetricDefs.PAGE_EPI.unit,BrowserAgent.globals.defaultMetricDefs.PAGE_EPI.type,g.resources.resErrCount);g.apmData?g.apmData.metrics.metricList.push(E):g.apmData=BrowserAgent.jsonUtils.createAPMData([E],null),delete g.resources.resErrCount,delete g.resources.pageMetricPath}if(i){var m=n.json.sessions.sessionList[0].id,b=BrowserAgent.globals.sessionToActiveEUMPayloadMap[m];b||(BrowserAgent.jsonUtils.updateEUMWithGeo(BrowserAgent.globals.eumJSONShell),(b=BrowserAgentBootstrap.origFuncMap.jsonParse(BrowserAgent.jsonStringify(BrowserAgent.globals.eumJSONShell))).app.ba.pages.pageList=[],BrowserAgent.globals.sessionToActiveEUMPayloadMap[m]=b),b.app.ba.pages.pageList.push(g),A=!0,n.json.pageLoadFlag&&(n.json.pageLoadFlag=!1),n.json.sessions.sessionList[0].newSessionFlag&&(n.json.sessions.sessionList[0].newSessionFlag=!1),g.sessions.sessionList[0].cv={lch:!1}}else!0===g.pageLoadFlag&&(n.json.pageLoadFlag=!0)}A&&(BrowserAgent.evtUtils.payloadProcessing(),BrowserAgent.evtUtils.resetClamps()),BrowserAgent.evtUtils.purgeOldPerfObjects(),s=(t=performance.now())-e,BrowserAgent.globals.selfMonPerformance.harvestpayload.numberOfHarvestCycles+=1,(0===BrowserAgent.globals.selfMonPerformance.harvestpayload.minTimeMS||BrowserAgent.globals.selfMonPerformance.harvestpayload.minTimeMS>s)&&(BrowserAgent.globals.selfMonPerformance.harvestpayload.minTimeMS=s),(0===BrowserAgent.globals.selfMonPerformance.harvestpayload.maxTimeMS||BrowserAgent.globals.selfMonPerformance.harvestpayload.maxTimeMS<s)&&(BrowserAgent.globals.selfMonPerformance.harvestpayload.maxTimeMS=s),BrowserAgent.globals.selfMonPerformance.harvestpayload.totalTimeMS+=s,BrowserAgent.globals.selfMonPerformance.harvestpayload.avgTimeMS=BrowserAgent.globals.selfMonPerformance.harvestpayload.totalTimeMS/BrowserAgent.globals.selfMonPerformance.harvestpayload.numberOfHarvestCycles},instrumentFetch:function(){const{fetch:e}=window;window.fetch=(async(...r)=>{let[t,s]=r,o=await e(t,s),n=o.url;return o.headers.forEach(function(e,r){r==BrowserAgent.globals.snippetAttrNames.RESPONSE_BT&&e.includes(BrowserAgent.cookieUtils.cookieKeys.graphqlResp)?(BrowserAgent.globals.fetchHeaderData.push(e),BrowserAgent.globals.fetchReqUrl.push(n)):r.toLowerCase()==BrowserAgent.globals.snippetAttrNames.RESPONSE_BT&&(BrowserAgent.globals.fetchHeaderData.push(e),BrowserAgent.globals.fetchReqUrl.push(n))}),o})},payloadProcessing:function(){if(BrowserAgent.globals.isOnUnload)null!==BrowserAgent.globals.deferredPayloadProcessing&&(clearTimeout(BrowserAgent.globals.deferredPayloadProcessing),BrowserAgent.globals.deferredPayloadProcessing=null),BrowserAgent.browserUtils.isSameSession(BrowserAgentBootstrap.origFuncMap.timeNow())||BrowserAgent.globals.prevSessionList.push(BrowserAgent.globals.currSession),BrowserAgent.globals.prevSessionList.length>0?BrowserAgent.evtUtils.lastChunkDetermination():BrowserAgent.evtUtils.chunkStampingAndDispatch();else{if(null!==BrowserAgent.globals.deferredPayloadProcessing)return;BrowserAgent.globals.prevSessionList.length>0?BrowserAgent.globals.deferredPayloadProcessing=setTimeout(BrowserAgent.evtUtils.lastChunkDetermination,2*BrowserAgent.globals.configs.METRICFREQUENCY):BrowserAgent.evtUtils.chunkStampingAndDispatch()}},lastChunkDetermination:function(){for(var e=0;e<BrowserAgent.globals.prevSessionList.length;e++){var r=BrowserAgent.globals.prevSessionList[e];if(r){var t=BrowserAgent.globals.sessionToActiveEUMPayloadMap[r.id];if(t&&t.app.ba.pages.pageList.length>0)for(var s=t.app.ba.pages.pageList,o=0;o<s.length;o++)s[o].sessions.sessionList[0].cv.lch=!0}}BrowserAgent.evtUtils.chunkStampingAndDispatch(),BrowserAgent.globals.deferredPayloadProcessing=null},prepareDataObjForGraphqlResponse:function(e,r){var t=!1;r&&(t=r.includes(BrowserAgent.cookieUtils.cookieKeys.graphqlResp)),t&&(BrowserAgent.cookieUtils.updateHPDataObjWithCookieData(BrowserAgent.cookieUtils.tokenizeCookieIntoMap(r,",")),e[BrowserAgent.globals.isGrphqlResp]=!0,e[BrowserAgent.cookieUtils.cookieKeys.CorBrowsGUIDChar]=BrowserAgent.globals.CorBrowsGUID,e[BrowserAgent.cookieUtils.cookieKeys.apmStartTimeChar]=BrowserAgent.globals.startTime,e[BrowserAgent.cookieUtils.cookieKeys.apmEndTimeChar]=BrowserAgent.globals.endTime)},chunkStampingAndDispatch:function(){for(var e=0;e<BrowserAgent.globals.prevSessionList.length;e++){var r=BrowserAgent.globals.prevSessionList[e];r&&BrowserAgent.evtUtils.processPayloadForSession(r)}if(BrowserAgent.globals.prevSessionList=[],BrowserAgent.globals.currSession){BrowserAgent.evtUtils.processPayloadForSession(BrowserAgent.globals.currSession);var t=BrowserAgent.globals.sessionToChunkMap[BrowserAgent.globals.currSession.id];BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.CHUNK_SEQ,t.ch,!0)}var s=Object.keys(BrowserAgent.globals.sessionToActiveEUMPayloadMap).length;s>0&&BrowserAgent.logger.error("chunkStampingAndDispatch: sessionToActiveEUMPayloadMap was found to still have "+s+" payloads ")},processPayloadForSession:function(e){if(e){var r=BrowserAgent.globals.sessionToActiveEUMPayloadMap[e.id];if(r&&r.app.ba.pages.pageList.length>0){for(var t=r.app.ba.pages.pageList,s=BrowserAgent.globals.sessionToChunkMap[e.id],o=0;o<t.length;o++)t[o].sessions.sessionList[0].cv.ch=s.ch,t[o].sessions.sessionList[0].cv.fch=s.fch;s.ch+=1,s.fch=!1,BrowserAgent.globals.sessionToChunkMap[e.id]=s,BrowserAgent.evtUtils.sendEvts(BrowserAgent.globals.configs.COLLECTORURL,r,!BrowserAgent.globals.isOnUnload),delete BrowserAgent.globals.sessionToActiveEUMPayloadMap[e.id]}}},determineEventTime:function(e){return BrowserAgent.globals.lastUserMouseDown<e&&e-BrowserAgent.globals.lastUserMouseDown<BrowserAgent.globals.EVENT_THRESHOLD&&(e=BrowserAgent.globals.lastUserMouseDown),e},canHarvestResource:function(e){var r=!0;if(BrowserAgent.evtUtils.hasItemInPRESet(e))return!1;var t=BrowserAgent.globals.BASrcFullPath,s=BrowserAgent.globals.extensionSrcFullPath;return(e.initiatorType!==BrowserAgent.globals.XML_HTTP_REQUEST_PERF_RES_TYPE||!e.name.toLowerCase().endsWith(BrowserAgent.globals.configs.COLLECTORURL.toLowerCase())&&!e.name.toLowerCase().endsWith(BrowserAgent.globals.profileURL.toLowerCase()))&&((t.length&&e.name.endsWith(t)||s.length&&e.name.endsWith(s)||BrowserAgent.configUtils.isUrlExcluded(e.name)||!BrowserAgent.evtUtils.canHarvestEdgeResource(e))&&(r=!1),r)},canHarvestEdgeResource:function(e){var r=!0;return BrowserAgent.globals.userAgents.EDGE.name!==BrowserAgent.globals.platform&&BrowserAgent.globals.userAgents.IE.name!==BrowserAgent.globals.platform||0===e.responseEnd&&(r=!1),r},generateProcessedResourceEntriesItem:function(e,r){return e+r},findPageBucketIndexForResource:function(e){var r=performance.timing.navigationStart+Math.floor(e.startTime),t=BrowserAgent.globals.sortedBucketList.length-1;if(BrowserAgent.globals.sortedBucketList[t].timestamp<=r)return t;var s,o=BrowserAgent.browserUtils.binarySearchByPropCompare(BrowserAgent.globals.sortedBucketList,r,"timestamp");return o>=0?s=o:o<0&&(0===(o+=1)?BrowserAgent.logger.warn("resourceTimingHarvest: found resource: "+e.name+" with time stamp earlier than all current buckets. Dropping item."):o<0&&(s=-1*o-1)),s},extractDataForResource:function(e,r){if(void 0!==e&&e>=0){var t=BrowserAgent.globals.sortedBucketList[e].bucket,s=BrowserAgent.evtUtils.getEvtObject(BrowserAgent.globals.evtTypes.RES,!1,null,t);if(null===s)return;s[BrowserAgent.globals.trackerDataKey]=BrowserAgent.browserUtils.cloneTrackerData(),s[BrowserAgent.globals.ajaxDataKeys.URL]=r.name;var o=Math.floor(r.startTime),n=Math.floor(r.fetchStart),a=Math.floor(r.responseStart),g=Math.floor(r.responseEnd);(o>0||n>0)&&(s[BrowserAgent.globals.timestampNames.REQUEST_START]=performance.timing.navigationStart+(o>0?o:n)),a>0&&(s[BrowserAgent.globals.timestampNames.FIRST_BYTE]=performance.timing.navigationStart+a),g>0&&(s[BrowserAgent.globals.timestampNames.LAST_BYTE]=performance.timing.navigationStart+g,s[BrowserAgent.globals.timestampNames.CALLBACK_END_TIME]=performance.timing.navigationStart+g),s[BrowserAgent.globals.ajaxDataKeys.RESPONSE_CONTENT_LENGTH]=r.decodedBodySize,s[BrowserAgent.globals.RAW_RESOURCE_TIME_DATA]={performanceResourceTiming:BrowserAgent.browserUtils.copyObj(r)},s.isDone=!0}},resourceTimingHarvest:function(){if(!BrowserAgent.globals.configs.RESOURCEMETRICSENABLED||!BrowserAgent.globals.isPerformanceResourceSupported)return 0;var e=performance.getEntriesByType("resource");if(void 0===e||e.length<=0)return 0;var r,t;for(t=0;t<e.length;t++)if(r=e[t],BrowserAgent.evtUtils.canHarvestResource(r))if(r.initiatorType!==BrowserAgent.globals.XML_HTTP_REQUEST_PERF_RES_TYPE&&"preflight"!==r.initiatorType&&"other"!==r.initiatorType)if(r.duration>=0&&r.duration<BrowserAgent.globals.configs.RESOURCEMETRICSTHRESHOLD)BrowserAgent.evtUtils.addItemToPRESet(r),BrowserAgent.logger.info("resourceTimingHarvest: Skipping harvest of resource metrics for "+r.name+" as it is below the configured resource metric threshold");else{var s=BrowserAgent.evtUtils.findPageBucketIndexForResource(r);void 0!==s&&(BrowserAgent.evtUtils.extractDataForResource(s,r),BrowserAgent.evtUtils.addItemToPRESet(r))}else if(r.initiatorType===BrowserAgent.globals.XML_HTTP_REQUEST_PERF_RES_TYPE){var o=r.requestStart+performance.timing.navigationStart,n=BrowserAgent.globals.urlToPerformanceListMap[r.name];n||(n=[],BrowserAgent.globals.urlToPerformanceListMap[r.name]=n);var a={perfObj:r,requestStart:o};BrowserAgent.browserUtils.binaryInsert(n,a,BrowserAgent.globals.REQUEST_START_PROP_NAME),BrowserAgent.globals.currentPerfObjectCount+=1,BrowserAgent.evtUtils.addItemToPRESet(r)}return e.length},addItemToPRESet:function(e){if(!e||!BrowserAgent.globals.processedResourceEntries)return BrowserAgent.logger.warn("addItemToPRESet: Cannot add resource as either resource is undefined or processResourceEntries Set is not present"),!1;var r=BrowserAgent.evtUtils.generateProcessedResourceEntriesItem(e.name,e.startTime);return BrowserAgent.globals.processedResourceEntries.addItem(r),!0},hasItemInPRESet:function(e){if(!e||!BrowserAgent.globals.processedResourceEntries)return BrowserAgent.logger.warn("hasItemInPRESet: Cannot find resource as either resource item is undefined or processResourceEntries Set is not present"),!1;var r=BrowserAgent.evtUtils.generateProcessedResourceEntriesItem(e.name,e.startTime);return BrowserAgent.globals.processedResourceEntries.hasItem(r)},removeItemFromPRESet:function(e){if(!e||!BrowserAgent.globals.processedResourceEntries)return BrowserAgent.logger.warn("hasItemInPRESet: Cannot find resource as either resource item is undefined or processResourceEntries Set is not present"),!1;var r=BrowserAgent.evtUtils.generateProcessedResourceEntriesItem(e.name,e.startTime);return BrowserAgent.globals.processedResourceEntries.removeItem(r),!0},sendEvts:function(e,r,t){r&&"string"==typeof e?("boolean"!=typeof t&&(t=!0),!1===t?BrowserAgent.evtUtils.sendBeacon(e,r):new BrowserAgent.RetrySendEventXHR(e,r).start()):BrowserAgent.logger.error("sendMetrics: Cannot send Browser Agent Metrics to URL: "+e+" with data as "+BrowserAgent.jsonStringify(r))},sendBeacon:function(e,r){if(navigator&&navigator.sendBeacon){var t=BrowserAgent.jsonStringify(r);navigator.sendBeacon(e,t),BrowserAgent.logger.debug("sendBeacon: Sending POST with "+t)}else BrowserAgent.evtUtils.addToRetryPayloadsMap(BrowserAgent.browserUtils.generateUUID(),e,r)},isClamped:function(e,r,t){return!!(BrowserAgent.evtUtils.evtClampMask&BrowserAgent.evtUtils.evtClampFlags[e].code)||r+1>t&&(BrowserAgent.evtUtils.evtClampMask|=BrowserAgent.evtUtils.evtClampFlags[e].code,BrowserAgent.logger.warn("isClamped: Browser Agent"+BrowserAgent.evtUtils.evtClampFlags[e].desc+"clamp reached. Halting"+BrowserAgent.evtUtils.evtClampFlags[e].desc+"until next metric interval..."),!0)},resetClamps:function(){BrowserAgent.evtUtils.currEvtCt=0,BrowserAgent.errorUtils.currErrCt=0,BrowserAgent.evtUtils.evtClampMask=0},addToRetryPayloadsMap:function(e,r,t){var s=BrowserAgent.globals.retryPayloadsMap[e];return BrowserAgent.globals.retryPayloadsMap[e]={url:r,data:t},s},removeFromRetryPayloadsMap:function(e){var r=BrowserAgent.globals.retryPayloadsMap[e];return delete BrowserAgent.globals.retryPayloadsMap[e],r},saveRetryPayloadsMapToSession:function(){var e=[];for(var r in BrowserAgent.globals.retryPayloadsMap)e.push(BrowserAgent.globals.retryPayloadsMap[r]);BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.PAYLOADRETRYLIST,BrowserAgent.jsonStringify(e),!0),BrowserAgent.globals.retryPayloadsMap={}},processRetryPayloadsFromSession:function(){var e=BrowserAgent.storageUtils.getFromStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.PAYLOADRETRYLIST);if(BrowserAgent.storageUtils.deleteFromStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.PAYLOADRETRYLIST),e)for(var r=BrowserAgentBootstrap.origFuncMap.jsonParse(e),t=0;t<r.length;t++)BrowserAgent.evtUtils.sendEvts(r[t].url,r[t].data)}},BrowserAgent.pageUtils={performance:null,init:function(){document.addEventListener("click",BrowserAgent.pageUtils.mouseClickRouteChangeWatcher,!0),BrowserAgent.globals.initPageInfo={},BrowserAgent.globals.initPageInfo.url=window.location.href,BrowserAgent.globals.initPageInfo.timeStamp=BrowserAgent.globals.baStartTime,document.referrer&&""!==document.referrer&&(BrowserAgent.globals.initPageInfo.referrer=document.referrer,BrowserAgent.globals.initPageInfo.prevPage=BrowserAgent.globals.initPageInfo.referrer);var e=BrowserAgent.jsonUtils.createBS(BrowserAgent.globals.bs,BrowserAgent.globals.bt,BrowserAgent.globals.btc);e&&(BrowserAgent.globals.initPageInfo.businessService=e),BrowserAgent.globals.initPageInfo.pageMetricPath=BrowserAgent.globals.metricPathConsts.PREFIX+BrowserAgent.globals.pipeChar;var r=BrowserAgent.browserUtils.parseURL(BrowserAgent.globals.initPageInfo.url);BrowserAgent.globals.bs===BrowserAgent.globals.UNDEFINED?BrowserAgent.globals.initPageInfo.pageMetricPath+=r.hostname+BrowserAgent.globals.forwardSlashChar+r.port+BrowserAgent.globals.pipeChar+r.pathname:BrowserAgent.globals.initPageInfo.pageMetricPath+=BrowserAgent.globals.bs+BrowserAgent.globals.pipeChar+BrowserAgent.globals.bt+BrowserAgent.globals.pipeChar+BrowserAgent.globals.btc+BrowserAgent.globals.pipeChar+BrowserAgent.globals.metricPathConsts.BROWSER,""!==r.hash&&(BrowserAgent.globals.initPageInfo.pageMetricPathNoHash=BrowserAgent.globals.initPageInfo.pageMetricPath,BrowserAgent.globals.initPageInfo.pageMetricPath+=BrowserAgent.globals.pipeChar+r.hash),BrowserAgent.pageUtils.addNewPageBucket(BrowserAgent.globals.pageBucketTypes.HP,BrowserAgent.globals.initPageInfo.url,BrowserAgent.globals.initPageInfo.timeStamp,!0,BrowserAgent.browserUtils.cloneTrackerData()),BrowserAgent.globals.configs.PAGELOADMETRICSENABLED?this.performance&&this.performance.timing?(BrowserAgent.logger.info("pageUtils.init: Navigation Timing API is present."),window.addEventListener("load",BrowserAgent.pageUtils.onload,!1)):BrowserAgent.logger.warn("pageUtils.init: Navigation Timing API is not present. Page load metrics will not be reported..."):(BrowserAgent.logger.info("pageUtils.init: Skipping page and soft page instrumentation because Page load metrics are DISABLED"),BrowserAgent.globals.isSoftPageLoad=!1),window.MutationObserver&&window.history?(BrowserAgent.globals.userAgents.EDGE.name===BrowserAgent.globals.platform||BrowserAgent.globals.userAgents.IE.name===BrowserAgent.globals.platform?window.addEventListener("hashchange",BrowserAgent.pageUtils.onpopstate,!0):window.addEventListener("popstate",BrowserAgent.pageUtils.onpopstate,!0),BrowserAgent.globals.domChangeObserver=new MutationObserver(function(e){BrowserAgent.globals.domLastUpdated=BrowserAgentBootstrap.origFuncMap.timeNow(),BrowserAgent.globals.domChangeTimerId||(document.addEventListener("mousedown",BrowserAgent.pageUtils.mouseEventHandler,!0),document.addEventListener("scroll",BrowserAgent.pageUtils.mouseEventHandler,!0),BrowserAgent.globals.domChangeTimerId=setInterval(BrowserAgent.pageUtils.checkLastDOMChange,BrowserAgent.globals.configs.DOMCHANGEINTERVAL))})):(BrowserAgent.logger.warn("pageUtils.init: Required browser APIs are not present. Soft Page load metrics will not be reported..."),BrowserAgent.globals.isSoftPageLoad=!1),document.addEventListener("mousedown",BrowserAgent.pageUtils.mouseDownHandler,!0)},mouseClickRouteChangeWatcher:function(e){for(var r=null,t=(e=e||window.event).target||e.srcElement,s=5;null!==t&&s>0;){var o=t.localName?t.localName.trim().toLocaleLowerCase():"";if(BrowserAgent.globals.supportedSPARouteTagNames[o]){r=t.textContent||t.innerText;break}t=t.parentElement,s-=1}null===r&&"undefined"!=typeof BrowserAgentExtension&&(r=BrowserAgentExtension.internal.safeCustomFunctionCall(this,BrowserAgentExtension.isClickedEventARouteChange,[e]));var n=BrowserAgentBootstrap.origFuncMap.timeNow();if(null!==r&&r===BrowserAgent.globals.lastCustomSPARouteName&&BrowserAgent.globals.lastCustomSPARouteTime>0){var a=n-BrowserAgent.globals.lastCustomSPARouteTime;a>=0&&a<BrowserAgent.globals.MAX_TIME_BETWEEN_SAME_CUSTOM_ROUTE&&(r=null)}r&&(BrowserAgent.globals.lastCustomSPARouteTime=n,BrowserAgent.globals.lastCustomSPARouteName=r,BrowserAgent.pageUtils.onpopstateImpl(window.location.href+"/"+r))},mouseDownHandler:function(){BrowserAgent.globals.lastUserMouseDown=BrowserAgentBootstrap.origFuncMap.timeNow()},addNewPageBucket:function(e,r,t,s,o){if(BrowserAgent.globals.configs.BROWSERAGENTENABLED){var n=BrowserAgent.globals.getSequenceNum(),a={json:{url:r,pageLoadFlag:!BrowserAgent.globals.configs.PAGELOADMETRICSENABLED,pageType:e,sessions:{sessionList:[]}},evtMap:{},evtCount:0,isExcluded:BrowserAgent.configUtils.isUrlExcluded(r),bucketId:BrowserAgent.browserUtils.generateUUID()};a.isExcluded&&BrowserAgent.logger.info("addNewPageBucket: Page ["+r+"] is configured to be EXCLUDED. Skipping all instrumentation on this page..."),t=BrowserAgent.evtUtils.determineEventTime(t);var g=!1;if(!1===s?(a.json.timeStamp=BrowserAgent.globals.currPagePtr.json.timeStamp,g=!0):(BrowserAgent.browserUtils.isSameSession(t)||(g=!0),a.json.timeStamp=t),g&&(BrowserAgent.globals.currTTimeEvtPtr&&(BrowserAgent.globals.currTTimeEvtPtr.e=BrowserAgentBootstrap.origFuncMap.timeNow(),BrowserAgent.globals.currTTimeEvtPtr.isDone=!0),BrowserAgent.globals.prevSessionList.push(BrowserAgent.globals.currSession),BrowserAgent.evtUtils.harvestEvts(),BrowserAgent.globals.currTTimeEvtPtr=null,BrowserAgent.globals.currSession=BrowserAgent.browserUtils.getNewSession(t)),BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BALASTEVENT_TIME,t,!0),BrowserAgent.globals.currSession.id){var i={id:BrowserAgent.globals.currSession.id};"number"==typeof BrowserAgent.globals.currSession.startTime&&(i.startTime=BrowserAgent.globals.currSession.startTime),"boolean"==typeof BrowserAgent.globals.currSession.isNewSession&&(i.newSessionFlag=BrowserAgent.globals.currSession.isNewSession),a.json.sessions.sessionList.push(i),BrowserAgent.globals.currSession.isNewSession&&(BrowserAgent.globals.currSession.isNewSession=!1)}if(BrowserAgent.globals.pageBucketsMap[n]=a,BrowserAgent.globals.prevPagePtr=BrowserAgent.globals.currPagePtr,BrowserAgent.globals.currPagePtr=BrowserAgent.globals.pageBucketsMap[n],BrowserAgent.globals.currPagePtr.id=n,e===BrowserAgent.globals.pageBucketTypes.HP)BrowserAgent.globals.initPageInfo.id=n,BrowserAgent.globals.initPageInfo.referrer&&(a.json.referrer={url:BrowserAgent.globals.initPageInfo.referrer},a.json.prevPage={url:BrowserAgent.globals.initPageInfo.prevPage,timeStamp:BrowserAgent.globals.initPageInfo.timeStamp}),BrowserAgent.globals.initPageInfo.businessService&&(a.json.businessService=BrowserAgent.globals.initPageInfo.businessService),a.pageMetricPath=BrowserAgent.globals.initPageInfo.pageMetricPath,!0===s&&(a.newPage=!0);else{a.json.referrer={url:BrowserAgent.globals.initPageInfo.url,timeStamp:BrowserAgent.globals.initPageInfo.timeStamp},a.json.prevPage={url:BrowserAgent.globals.prevPagePtr.json.url,timeStamp:BrowserAgent.globals.prevPagePtr.json.timeStamp};var l=BrowserAgent.browserUtils.parseURL(r);BrowserAgent.globals.initPageInfo.businessService?(a.json.businessService=BrowserAgent.jsonUtils.createBS(BrowserAgent.globals.bs,BrowserAgent.globals.bt,BrowserAgent.globals.btc),a.pageMetricPath=BrowserAgent.globals.metricPathConsts.PREFIX+BrowserAgent.globals.pipeChar+BrowserAgent.globals.bs+BrowserAgent.globals.pipeChar+BrowserAgent.globals.bt+BrowserAgent.globals.pipeChar+BrowserAgent.globals.btc+BrowserAgent.globals.pipeChar+BrowserAgent.globals.metricPathConsts.BROWSER+(""===l.hash?"":BrowserAgent.globals.pipeChar+l.hash)):a.pageMetricPath=BrowserAgent.globals.metricPathConsts.PREFIX+BrowserAgent.globals.pipeChar+l.hostname+BrowserAgent.globals.forwardSlashChar+l.port+BrowserAgent.globals.pipeChar+l.pathname+(""===l.hash?"":BrowserAgent.globals.pipeChar+l.hash)}var A={id:n,bucket:BrowserAgent.globals.pageBucketsMap[n],timestamp:t};BrowserAgent.globals.sortedBucketList.push(A),BrowserAgent.globals.currTTimeEvtPtr&&(BrowserAgent.globals.currTTimeEvtPtr.e=t,BrowserAgent.globals.currTTimeEvtPtr.isDone=!0);var B=BrowserAgent.evtUtils.getEvtObject(BrowserAgent.globals.evtTypes.TTIME,!1,null);if(B&&(B.s=t,B[BrowserAgent.globals.trackerDataKey]=o),BrowserAgent.globals.currTTimeEvtPtr=B,BrowserAgent.globals.sortedBucketList.length>BrowserAgent.globals.pageBucketsMaxLen){var w=BrowserAgent.globals.sortedBucketList[0].id;delete BrowserAgent.globals.pageBucketsMap[w],delete BrowserAgent.globals.pageWithEventsMap[w],BrowserAgent.globals.sortedBucketList.shift()}return BrowserAgent.globals.currPagePtr}},onpopstate:function(e){BrowserAgent.pageUtils.onpopstateImpl(window.location.href)},onpopstateImpl:function(e){var r=BrowserAgentBootstrap.origFuncMap.timeNow(),t=BrowserAgent.browserUtils.cloneTrackerData();BrowserAgent.pageUtils.addNewPageBucket(BrowserAgent.globals.pageBucketTypes.SP,e,r,!0,t),(BrowserAgent.globals.domChangeTimeoutId||BrowserAgent.globals.domChangeTimerId)&&(BrowserAgent.logger.debug("onpopstate: DOM change tracking terminated by new route change."),BrowserAgent.pageUtils.endDomTracking(r)),BrowserAgent.globals.isSoftPageLoad&&BrowserAgent.pageUtils.startDomTracking(r,t)},disableSoftPages:function(){(BrowserAgent.globals.domChangeTimeoutId||BrowserAgent.globals.domChangeTimerId)&&BrowserAgent.pageUtils.clearDomChangeTrackers(),BrowserAgent.globals.isSoftPageLoad=!1},mouseEventHandler:function(){var e=BrowserAgentBootstrap.origFuncMap.timeNow();(BrowserAgent.globals.domChangeTimeoutId||BrowserAgent.globals.domChangeTimerId)&&(BrowserAgent.logger.debug("mouseEventHandler: DOM change tracking terminated by user interaction."),BrowserAgent.pageUtils.endDomTracking(e))},checkLastDOMChange:function(){BrowserAgentBootstrap.origFuncMap.timeNow()>BrowserAgent.globals.domLastUpdated+BrowserAgent.globals.configs.DOMCHANGEINTERVAL&&(BrowserAgent.logger.debug("checkLastDOMChange: DOM has finished loading."),BrowserAgent.pageUtils.endDomTracking(BrowserAgent.globals.domLastUpdated))},startDomTracking:function(e,r){if(e>0){var t=BrowserAgent.evtUtils.getEvtObject(BrowserAgent.globals.evtTypes.SPLOAD,!1,null);if(!t)return;BrowserAgent.globals.domChangeTimeoutId=setTimeout(function(){BrowserAgent.logger.debug("startDomTracking: DOM change tracking timed out."),BrowserAgent.pageUtils.endDomTracking(BrowserAgentBootstrap.origFuncMap.timeNow())},BrowserAgent.globals.configs.DOMCHANGETIMEOUT),BrowserAgent.globals.softPageLoadEvtObj=t,t[BrowserAgent.globals.softPageDataKeys.START]=e,t[BrowserAgent.globals.trackerDataKey]=r,BrowserAgent.globals.domChangeObserver.observe(document,BrowserAgent.globals.domChangeObserverConfig)}else BrowserAgent.logger.error("startDomTracking: startTime is invalid.")},endDomTracking:function(e){if(e>0){var r=BrowserAgent.globals.domLastUpdated;BrowserAgent.pageUtils.clearDomChangeTrackers(),r||(e=BrowserAgent.globals.softPageLoadEvtObj[BrowserAgent.globals.softPageDataKeys.START]),BrowserAgent.globals.softPageLoadEvtObj[BrowserAgent.globals.softPageDataKeys.END]=e,BrowserAgent.globals.softPageLoadEvtObj.isDone=!0}else BrowserAgent.logger.error("endDomTracking: Input is invalid.")},clearDomChangeTrackers:function(){BrowserAgent.globals.domChangeObserver.disconnect(),BrowserAgent.globals.domLastUpdated=null,clearInterval(BrowserAgent.globals.domChangeTimerId),BrowserAgent.globals.domChangeTimerId=null,clearTimeout(BrowserAgent.globals.domChangeTimeoutId),BrowserAgent.globals.domChangeTimeoutId=null,document.removeEventListener("mousedown",BrowserAgent.pageUtils.mouseEventHandler,!0),document.removeEventListener("scroll",BrowserAgent.pageUtils.mouseEventHandler,!0)},onload:function(){BrowserAgent.logger.info("onload: Detected 'onload' event..."),setTimeout(function(){BrowserAgent.pageUtils.onloadHelper()},0),setTimeout(function(){BrowserAgent.pageUtils.checkAnyCORSIssue()},2e3)},getAllFrameSourceList:function(){var e,r=[],t=document.getElementsByTagName("frame");for(e=0;e<t.length;e++)r.push(t[e].src);for(t=document.getElementsByTagName("iframe"),e=0;e<t.length;e++)r.push(t[e].src);return r},checkAnyCORSIssue:function(){for(var e,r,t=BrowserAgent.pageUtils.getAllFrameSourceList(),s=0;s<window.frames.length;s++)try{window.frames[s].location.origin&&(r=t.indexOf(window.frames[s].location.href))>-1&&t.splice(r,1)}catch(e){((BrowserAgent.globals.platform===BrowserAgent.globals.userAgents.CHROME.name||BrowserAgent.globals.platform===BrowserAgent.globals.userAgents.SAFARI.name)&&e.code===DOMException.SECURITY_ERR||(BrowserAgent.globals.platform===BrowserAgent.globals.userAgents.IE.name||BrowserAgent.globals.platform===BrowserAgent.globals.userAgents.EDGE.name)&&"Permission denied"===e.message||e.message&&-1!=e.message.indexOf("Blocked a frame with origin"))&&BrowserAgent.logger.info("Frames Exception:: "+e.message,e)}for(e in t)BrowserAgent.errorUtils.captureCORSError(t[e],BrowserAgent.errorUtils.elementPointInCode(e,0))},onloadHelper:function(){BrowserAgent.logger.info("onloadHelper: OnloadHelper has started");var e=BrowserAgent.globals.pageBucketsMap[BrowserAgent.globals.initPageInfo.id];if(!e.isExcluded&&!BrowserAgent.evtUtils.isClamped(BrowserAgent.evtUtils.evtClampFlags.COL.type,BrowserAgent.evtUtils.currEvtCt,BrowserAgent.globals.configs.EVENTCOLLECTIONCLAMPPERINTERVAL)){var r=BrowserAgent.globals.getSequenceNum();e.evtMap[r]={id:r,type:BrowserAgent.globals.evtTypes.HPLOAD,raw:BrowserAgent.pageUtils.performance.timing,isDone:!0,bucketId:e.bucketId},e.evtMap[r][BrowserAgent.globals.trackerDataKey]=BrowserAgent.browserUtils.cloneTrackerData(),e.evtCount+=1,BrowserAgent.globals.pageWithEventsMap[BrowserAgent.globals.initPageInfo.id]=1}},unloadEventHandler:function(){setTimeout(function(){var e=performance.now();!BrowserAgent.globals.unloadEvtHndlrFlag&&BrowserAgent.globals.currTTimeEvtPtr&&(BrowserAgent.globals.currTTimeEvtPtr.e=BrowserAgentBootstrap.origFuncMap.timeNow(),BrowserAgent.globals.currTTimeEvtPtr.isDone=!0,BrowserAgent.globals.unloadEvtHndlrFlag=!0,BrowserAgent.globals.isOnUnload=!0,BrowserAgent.evtUtils.harvestEvts(),BrowserAgent.evtUtils.saveRetryPayloadsMapToSession(),BrowserAgent.configUtils.disableBA(),BrowserAgent.globals.selfMonPerformance.baunload=performance.now()-e,BrowserAgent.logger.info("unloadEventHandler: unload time was "+BrowserAgent.globals.selfMonPerformance.baunload))},0)}},"undefined"!=typeof BrowserAgentExtension&&(BrowserAgentExtension.extCustomPageMetricList=[],BrowserAgentExtension.extCustomOptionalPropertyList=[],BrowserAgentExtension.internal={astralRange:/\ud83c[\udffb-\udfff](?=\ud83c[\udffb-\udfff])|(?:[^\ud800-\udfff][\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0]?|[\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0]|\ud83c[\udffb-\udfff])?(?:\u200d(?:[^\ud800-\udfff]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0]|\ud83c[\udffb-\udfff])?)*/g,maxUserFeedbackLength:256,safeCustomFunctionCall:function(e,r,t){try{var s=null;return"function"==typeof r?s=r.apply(e,t):BrowserAgent.logger.error("safeCustomFunctionCall: function does not exist "),s}catch(e){BrowserAgent.logger.error("safeCustomFunctionCall: Error when invoking custom code in function: "+r.name+", Error: "+e.message)}},axaExtDataKeys:{CUSTID:"axa_customerId",CUSTSESSINFO:"axa_customSessionInfo",TXNNAME:"axa_transactionName",SVCNAME:"axa_serviceName",TXN:"axa_transaction"},createAXAEvent:function(e,r,t,s,o,n,a,g,i,l,A,B,w,c,u){var p={};return"number"!=typeof e||isNaN(e)||(p.eventId=e),"string"==typeof r&&(p.eventName=r),"string"==typeof t&&(p.eventType=t),("number"==typeof s&&!isNaN(s)||"string"==typeof s)&&(p.eventValue=s),"number"!=typeof o||isNaN(o)||(p.timeStamp=o),"string"==typeof n&&(p.url=n),"number"!=typeof a||isNaN(a)||(p.responseTime=a),"number"!=typeof g||isNaN(g)||(p.statusCode=g),"number"!=typeof i||isNaN(i)||(p.dataIn=i),"number"!=typeof l||isNaN(l)||(p.dataOut=l),"string"==typeof A&&(p.countryCode=A),"string"==typeof B&&(p.zipCode=B),"string"==typeof w&&(p.latitude=w),"string"==typeof c&&(p.longitude=c),u&&u.length>0&&(p.x_attributes={x_attributeList:u}),p},addAXAData:function(e){var r=null;try{if(null===e||"object"!=typeof e)return void BrowserAgent.logger.warn("addAXAData: Cannot add data due to invalid input");if(!(r=BrowserAgent.evtUtils.getEvtObject(BrowserAgent.globals.evtTypes.AXAEXT,!1,null)))return;var t,s,o=[],n=[],a=BrowserAgentBootstrap.origFuncMap.jsonParse(BrowserAgent.storageUtils.getFromStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BATRKR));if("string"==typeof e.trackerId&&null!==e.trackerData&&"object"==typeof e.trackerData){if(a&&a.trackerId)return;for(t in e.trackerData)(s=BrowserAgent.jsonUtils.createXAttribute(t,e.trackerData[t]))&&o.push(s);(a={})[e.trackerId]={x_attributes:{x_attributeList:o}},BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BATRKR,BrowserAgent.jsonStringify(a),!0)}else for(var g in a)n=n.concat(a[g].x_attributes.x_attributeList);if(e.attr)for(t in e.attr)(s=BrowserAgent.jsonUtils.createXAttribute(t,e.attr[t]))&&n.push(s);if(!(s=BrowserAgentExtension.internal.createAXAEvent(e.eid,e.n,e.ty,e.v,e.t,e.u,e.r,e.s,e.i,e.o,e.cc,e.zp,e.la,e.lo,n)))return void(r.isDelete=!0);r.d=s,r.isDone=!0}catch(e){r&&(r.isDelete=!0)}},clearTracker:function(e){var r;try{("string"!=typeof e||e.length<1)&&BrowserAgent.logger.warn("clearTracker: Cannot clear data for tracker ID ["+e+"]"),(r=BrowserAgentBootstrap.origFuncMap.jsonParse(BrowserAgent.storageUtils.getFromStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BATRKR)))&&r[e]&&(delete r[e],BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BATRKR,BrowserAgent.jsonStringify(r),!0))}catch(r){BrowserAgent.logger.error("clearTracker: Cannot clear data for tracker ID ["+e+"] - "+r.message)}},clearAllTrackers:function(){try{if(!BrowserAgent.globals.isStoragePresent)return;sessionStorage.removeItem(BrowserAgent.storageUtils.storageKeys.BATRKR);var e=BrowserAgentBootstrap.origFuncMap.jsonParse(BrowserAgent.storageUtils.getFromStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BATTPERST));e&&(delete e[BrowserAgentExtension.internal.axaExtDataKeys.TXN],BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BATTPERST,BrowserAgent.jsonStringify(e),!0))}catch(e){BrowserAgent.logger.error("clearAllTrackers: Cannot clear tracker data - "+e.message)}},getTrackerDataById:function(e){try{var r=BrowserAgentBootstrap.origFuncMap.jsonParse(BrowserAgent.storageUtils.getFromStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BATRKR));return r&&r[e]?r[e]:null}catch(r){return BrowserAgent.logger.error("getTrackerDataById: Cannot obtain data for tracker ID ["+e+"] - "+r.message),null}},getTrueLength:function(e){var r=e.match(BrowserAgentExtension.internal.astralRange);return null===r?0:r.length},limitToLength:function(e,r){return BrowserAgentExtension.internal.getTrueLength(e)<=r?e:e.match(BrowserAgentExtension.internal.astralRange).slice(0,r).join("")}},BrowserAgentExtension.createCustomMetric=function(e,r,t,s,o){var n={name:e,accumulatorType:t,value:s,path:o};return r&&(n.unit=r),n},BrowserAgentExtension.addExtensionJSONObject=function(e){var r=null;try{if(!BrowserAgentExtension.isBAAlive())return;if(!e||0===e.length)return void BrowserAgent.logger.warn("addExtensionJSONObject: Invalid metric list. Discard extension JSON object...");if(!(r=BrowserAgent.evtUtils.getEvtObject(BrowserAgent.globals.evtTypes.APMEXT,!1,null)))return;for(var t=0;t<e.length;t++){var s=e[t];if(!s||!BrowserAgent.jsonUtils.validateMetric(s.path,s.name,s.unit,s.accumulatorType,s.value))return BrowserAgent.logger.warn("addExtensionJSONObject: Invalid metric list. Discard extension JSON object..."),void(r.isDelete=!0);e[t].value=e[t].value.toString()}r.lst=e,r.isDone=!0}catch(e){r&&(r.isDelete=!0),BrowserAgent.logger.error("addExtensionJSONObject: "+e.message)}},BrowserAgentExtension.addCustomOptionalProperty=function(e,r,t){BrowserAgentExtension.extCustomOptionalPropertyList.push({name:e,value:r,description:t})},BrowserAgentExtension.addCustomAjaxMetric=function(){BrowserAgent.logger.warn("addCustomAjaxMetric: This API has been deprecated. Please consult the BA documentation")},BrowserAgentExtension.addCustomJSFuncMetric=function(){BrowserAgent.logger.warn("addCustomJSFuncMetric: This API has been deprecated. Please consult the BA documentation")},BrowserAgentExtension.addCustomPageMetric=function(e,r,t,s){BrowserAgentExtension.extCustomPageMetricList.push(BrowserAgentExtension.createCustomMetric(e,r,t,s))},BrowserAgentExtension.instrumentFunc=function(e,r,t){BrowserAgentExtension.isBAAlive()&&BrowserAgent.funcUtils.instrumentFunc(e,r,t,BrowserAgent.globals.funcInstrumentMaxRetryCount,!0)},BrowserAgentExtension.addJSFuncToInstrument=BrowserAgentExtension.instrumentFunc,BrowserAgentExtension.deInstrumentFunc=function(e,r,t){BrowserAgentExtension.isBAAlive()&&BrowserAgent.funcUtils.deInstrumentFunc(e,r,t,!0)},BrowserAgentExtension.logTextMetric=function(e){try{if(!BrowserAgentExtension.isBAAlive())return;if(!e||!e.key||!e.value)return void BrowserAgent.logger.warn("logTextMetric: Event "+e+" is not valid. Please pass a valid logTextMetric event");var r={t:BrowserAgentBootstrap.origFuncMap.timeNow(),ty:"custom",n:e.key,v:e.value};e.attributes?r.attr=e.attributes:r.attr={},r.attr.dty="string",BrowserAgentExtension.internal.addAXAData(r),BrowserAgentExtension.addExtensionJSONObject([BrowserAgentExtension.createCustomMetric(e.key,null,BrowserAgent.globals.metricAggregatorType.STRING,e.value,BrowserAgent.globals.currPagePtr.pageMetricPath+BrowserAgent.globals.pipeChar+BrowserAgent.globals.metricPathConsts.CUSTOM)])}catch(e){BrowserAgent.logger.error("logTextMetric: "+e.message)}},BrowserAgentExtension.logNumericMetric=function(e){try{if(!BrowserAgentExtension.isBAAlive())return;if(!e||!e.key||!e.value)return void BrowserAgent.logger.warn("logNumericMetric: Event "+e+" is not valid. Please pass a valid logNumericMetric event");var r={t:BrowserAgentBootstrap.origFuncMap.timeNow(),ty:"custom",n:e.key,v:e.value};e.attributes?r.attr=e.attributes:r.attr={},r.attr.dty="double",BrowserAgentExtension.internal.addAXAData(r),BrowserAgentExtension.addExtensionJSONObject([BrowserAgentExtension.createCustomMetric(e.key,null,BrowserAgent.globals.metricAggregatorType.INT_LONG_DURATION,parseFloat(e.value),BrowserAgent.globals.currPagePtr.pageMetricPath+BrowserAgent.globals.pipeChar+BrowserAgent.globals.metricPathConsts.CUSTOM)])}catch(e){BrowserAgent.logger.error("logNumericMetric: "+e.message)}},BrowserAgentExtension.setCustomerLocation=function(e){try{if(!BrowserAgentExtension.isBAAlive())return;if(!e)return void BrowserAgent.logger.warn("setCustomerLocation: "+e+" is not valid. Please pass a valid setCustomerLocation event");var r={},t=!1;if(e.zipCode&&e.countryCode&&(r.zp=e.zipCode,r.cc=e.countryCode,t=!0),e.latitude&&e.longitude){r.la=e.latitude,r.lo=e.longitude;var s={lat:Number(r.la),lon:Number(r.lo)},o=BrowserAgent.jsonStringify(s);BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.GEOCUSTOM,o,!0),t=!0}if(!t)return void BrowserAgent.logger.warn("setCustomerLocation: "+e+" is not valid. Please pass a valid setCustomerLocation location");r.t=BrowserAgentBootstrap.origFuncMap.timeNow(),r.ty="sessionEvent",r.n="customerLocation",e.attributes&&(r.attr=e.attributes),BrowserAgentExtension.internal.addAXAData(r)}catch(e){BrowserAgent.logger.error("setCustomerLocation: "+e.message)}},BrowserAgentExtension.setSessionAttribute=function(e){try{if(!BrowserAgentExtension.isBAAlive())return;if(!e||!e.key||!e.value)return void BrowserAgent.logger.warn("setSessionAttribute: Event "+e+" is not valid. Please pass a valid setSessionAttribute event");var r={t:BrowserAgentBootstrap.origFuncMap.timeNow(),n:e.key,v:e.value,ty:"sessionEvent"};e.attributes?r.attr=e.attributes:r.attr={},e.type?r.attr.dty=e.type:(r.attr.dty="string",r.v=r.v.toString()),BrowserAgentExtension.internal.addAXAData(r);var t=[];BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createXAttribute(BrowserAgentExtension.internal.axaExtDataKeys.CUSTSESSINFO+BrowserAgent.globals.underscoreChar+e.key,r.v),t);for(var s in e.attributes)BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createXAttribute(BrowserAgentExtension.internal.axaExtDataKeys.CUSTSESSINFO+BrowserAgent.globals.underscoreChar+s,e.attributes[s].toString()),t);var o=BrowserAgentBootstrap.origFuncMap.jsonParse(BrowserAgent.storageUtils.getFromStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BATTPERST));o||(o={}),o[BrowserAgentExtension.internal.axaExtDataKeys.CUSTSESSINFO+BrowserAgent.globals.underscoreChar+e.key]=t,BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BATTPERST,BrowserAgent.jsonStringify(o),!0)}catch(e){BrowserAgent.logger.error("setSessionAttribute: "+e.message)}},BrowserAgentExtension.startApplicationTransaction=function(e){try{if(!BrowserAgentExtension.isBAAlive())return;if(!e||!e.transactionName)return void BrowserAgent.logger.warn("startApplicationTransaction: Event "+e+" is not valid. Please pass a valid startApplicationTransaction  event");var r=BrowserAgentBootstrap.origFuncMap.timeNow(),t=e.transactionName;if(e.serviceName&&(t+=BrowserAgent.globals.dashChar+e.serviceName),BrowserAgentExtension.internal.getTrackerDataById(t))return void BrowserAgent.logger.warn("startApplicationTransaction: AXA Transaction with transaction tracker "+t+" already started");var s={t:r,ty:"txn_events",n:"apptxn_start",v:e.transactionName,trackerData:{ca_at:e.transactionName,txn_s:r},trackerId:t};e.attributes?s.attr=e.attributes:s.attr={},s.attr.mode="MANUAL",s.attr.txn_s=r,e.serviceName&&(s.attr.ca_as=e.serviceName,s.trackerData.ca_as=e.serviceName),BrowserAgentExtension.internal.addAXAData(s);var o=[];BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createXAttribute(BrowserAgentExtension.internal.axaExtDataKeys.TXNNAME,e.transactionName),o),e.serviceName&&BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createXAttribute(BrowserAgentExtension.internal.axaExtDataKeys.SVCNAME,e.serviceName),o);for(var n in e.attributes)BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createXAttribute(BrowserAgentExtension.internal.axaExtDataKeys.TXN+BrowserAgent.globals.underscoreChar+n,e.attributes[n].toString()),o);var a=BrowserAgentBootstrap.origFuncMap.jsonParse(BrowserAgent.storageUtils.getFromStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BATTPERST));a||(a={}),a[BrowserAgentExtension.internal.axaExtDataKeys.TXN]=o,BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BATTPERST,BrowserAgent.jsonStringify(a),!0)}catch(e){BrowserAgent.logger.error("startApplicationTransaction: "+e.message)}},BrowserAgentExtension.stopApplicationTransaction=function(e){try{if(!BrowserAgentExtension.isBAAlive())return;if(!e||!e.transactionName)return void BrowserAgent.logger.warn("stopApplicationTransaction: Event "+e+" is not valid. Please pass a valid stopApplicationTransaction event");var r=e.transactionName;e.serviceName&&(r+="-"+e.serviceName);var t=BrowserAgentExtension.internal.getTrackerDataById(r);if(!t)return void BrowserAgent.logger.info("stopApplicationTransaction: Cannot stop AXA Transaction with transaction tracker "+t+". Please check if transaction is started");var s={t:BrowserAgentBootstrap.origFuncMap.timeNow(),ty:"txn_events",v:e.transactionName};e.attributes?s.attr=e.attributes:s.attr={},s.attr.mode="MANUAL",e.failure?(s.n="apptxn_fail",s.attr.fd=e.failure):s.n="apptxn_end",e.serviceName&&(s.attr.ca_as=e.serviceName),BrowserAgentExtension.internal.addAXAData(s),BrowserAgentExtension.internal.clearTracker(r);var o=BrowserAgentBootstrap.origFuncMap.jsonParse(BrowserAgent.storageUtils.getFromStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BATTPERST));if(!o||!o[BrowserAgentExtension.internal.axaExtDataKeys.TXN])return;delete o[BrowserAgentExtension.internal.axaExtDataKeys.TXN],BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BATTPERST,BrowserAgent.jsonStringify(o),!0)}catch(e){BrowserAgent.logger.error("stopApplicationTransaction: "+e.message)}},BrowserAgentExtension.logNetworkEvent=function(e){try{if(!BrowserAgentExtension.isBAAlive())return;if(!(e&&e.url&&e.status&&e.inbytes&&e.outbytes&&e.time))return void BrowserAgent.logger.warn("logNetworkEvent: Event "+e+" is not valid. Please pass a valid Network Event with url, in bytes, out bytes, status and response time");var r={t:BrowserAgentBootstrap.origFuncMap.timeNow(),ty:"network",u:e.url,s:e.status,i:e.inbytes,o:e.outbytes,r:e.time};e.attributes&&(r.attr=e.attributes);var t=BrowserAgent.browserUtils.parseURL(e.url),s=BrowserAgent.globals.currPagePtr.pageMetricPath+BrowserAgent.globals.pipeChar+BrowserAgent.globals.metricPathConsts.CUSTOM+BrowserAgent.globals.pipeChar+BrowserAgent.globals.metricPathConsts.NETWORKEVT+BrowserAgent.globals.pipeChar+t.hostname+BrowserAgent.globals.forwardSlashChar+t.port+BrowserAgent.globals.pipeChar+t.pathname;BrowserAgentExtension.internal.addAXAData(r),BrowserAgentExtension.addExtensionJSONObject([BrowserAgentExtension.createCustomMetric(BrowserAgent.globals.defaultMetricDefs.AXA_NRT.name,BrowserAgent.globals.defaultMetricDefs.AXA_NRT.unit,BrowserAgent.globals.defaultMetricDefs.AXA_NRT.type,parseInt(e.time),s)])}catch(e){BrowserAgent.logger.error("logNetworkEvent: "+e.message)}},BrowserAgentExtension.setCustomerId=function(e){try{if(!BrowserAgentExtension.isBAAlive())return;if(!e||!e.customerId)return void BrowserAgent.logger.warn("setCustomerId: Event "+e+" is not valid. Please pass a valid setCustomerId event");var r={t:BrowserAgentBootstrap.origFuncMap.timeNow(),n:"customerId",v:e.customerId,ty:"sessionEvent"};e.attributes&&(r.attr=e.attributes),BrowserAgentExtension.internal.addAXAData(r);var t=[];BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createXAttribute(BrowserAgentExtension.internal.axaExtDataKeys.CUSTID,e.customerId.toString()),t);for(var s in e.attributes)BrowserAgent.jsonUtils.addToList(BrowserAgent.jsonUtils.createXAttribute(BrowserAgentExtension.internal.axaExtDataKeys.CUSTID+BrowserAgent.globals.underscoreChar+s,e.attributes[s].toString()),t);var o=BrowserAgentBootstrap.origFuncMap.jsonParse(BrowserAgent.storageUtils.getFromStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BATTPERST));o||(o={}),o[BrowserAgentExtension.internal.axaExtDataKeys.CUSTID]=t,BrowserAgent.storageUtils.putInStorage(BrowserAgent.storageUtils.storageTypes.SESSION,BrowserAgent.storageUtils.storageKeys.BATTPERST,BrowserAgent.jsonStringify(o),!0)}catch(e){BrowserAgent.logger.error("setCustomerId: "+e.message)}},BrowserAgentExtension.setUserFeedback=function(e){try{if(!BrowserAgentExtension.isBAAlive())return;if("string"!=typeof e||e.length<=0)return void BrowserAgent.logger.warn("setUserFeedback: Feedback ["+evt+"] is not valid. Please provide valid user feedback");var r=BrowserAgentExtension.internal.limitToLength(e.trim(),BrowserAgentExtension.internal.maxUserFeedbackLength),t={t:BrowserAgentBootstrap.origFuncMap.timeNow(),n:"User Feedback",v:r,ty:"custom_event"};BrowserAgentExtension.internal.addAXAData(t)}catch(e){BrowserAgent.logger.error("setUserFeedback: "+e.message)}}),BrowserAgent.main=function(){var e=BrowserAgent.browserUtils.getBrowserInfo(navigator.userAgent);if(e.isSupported)if("undefined"!=typeof BAAppProfile){BrowserAgent.evtUtils.instrumentFetch();var r=performance.now();BrowserAgent.funcUtils.saveOrigObj("timeNow",Date.now),BrowserAgent.funcUtils.saveOrigObj("timeParse",Date.parse),BrowserAgent.funcUtils.saveOrigObj("jsonParse",JSON.parse),BrowserAgent.funcUtils.saveOrigObj("jsonStringify",JSON.stringify),BrowserAgent.jsonStringify=function(e,r,t){var s=Array.prototype.toJSON;delete Array.prototype.toJSON;var o=BrowserAgentBootstrap.origFuncMap.jsonStringify(e,r,t);return s&&(Array.prototype.toJSON=s),o};var t;try{t=BrowserAgentBootstrap.origFuncMap.jsonParse(BrowserAgent.jsonStringify(BAAppProfile))}catch(e){return void BrowserAgent.logger.error("BrowserAgent.main: Invalid app profile - "+e.message+". Disabling Browser Agent...")}if(BrowserAgent.configUtils.extractAppInfo()){if(BrowserAgent.globals.configs=BrowserAgentBootstrap.origFuncMap.jsonParse(BrowserAgent.jsonStringify(BrowserAgent.configUtils.defaults)),BrowserAgent.globals.configs.BROWSERLOGGINGENABLED=!0,BrowserAgent.configUtils.processAppProfile(t))if(!1!==BrowserAgent.globals.configs.BROWSERAGENTENABLED)if("string"==typeof BrowserAgent.globals.configs.COLLECTORURL&&""!==BrowserAgent.globals.configs.COLLECTORURL){window.XMLHttpRequest&&(BrowserAgent.funcUtils.saveOrigObj("XHR",window.XMLHttpRequest),BrowserAgent.funcUtils.saveOrigObj("XHROpen",window.XMLHttpRequest.prototype.open),BrowserAgent.funcUtils.saveOrigObj("XHRSend",window.XMLHttpRequest.prototype.send)),String.prototype.includes||(String.prototype.includes=BrowserAgent.browserUtils.includes),String.prototype.endsWith||(String.prototype.endsWith=function(e,r){var t=this.toString();("number"!=typeof r||!isFinite(r)||Math.floor(r)!==r||r>t.length)&&(r=t.length),r-=e.length;var s=t.lastIndexOf(e,r);return-1!==s&&s===r}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")}),BrowserAgent.pageUtils.performance=window.performance,BrowserAgent.globals.baStartTime=BrowserAgent.pageUtils.performance&&BrowserAgent.pageUtils.performance.timing&&BrowserAgent.pageUtils.performance.timing.navigationStart?BrowserAgent.pageUtils.performance.timing.navigationStart:BrowserAgentBootstrap.origFuncMap.timeNow();var s=null;BrowserAgent.globals.platform=e.name,BrowserAgent.globals.platformVersion=e.ver,BrowserAgent.globals.isCookieEnabled=BrowserAgent.cookieUtils.isCookieEnabled(),BrowserAgent.globals.isCookieEnabled?(BrowserAgent.cookieUtils.setRawCookie(BrowserAgent.cookieUtils.cookies.PLATFORM,e.name,null,BrowserAgent.globals.forwardSlashChar,null),BrowserAgent.cookieUtils.setRawCookie(BrowserAgent.cookieUtils.cookies.PLATFORMVER,e.ver,null,BrowserAgent.globals.forwardSlashChar,null),(s=BrowserAgent.cookieUtils.getRawCookie(BrowserAgent.cookieUtils.cookies.SERVERTIME))&&(BrowserAgent.globals.gapTimeInMillis=BrowserAgent.globals.baStartTime-s,BrowserAgent.cookieUtils.setRawCookie(BrowserAgent.cookieUtils.cookies.GAPTIME,Math.ceil(BrowserAgent.globals.gapTimeInMillis/1e3),null,BrowserAgent.globals.forwardSlashChar,null),BrowserAgent.logger.info("BrowserAgent.main: Client Server gap time is "+BrowserAgent.globals.gapTimeInMillis+" ms"))):BrowserAgent.logger.warn("BrowserAgent.main: Cookies seem to be DISABLED. Browser Agent may exhibit unexpected behavior."),BrowserAgent.cookieUtils.init(),BrowserAgent.storageUtils.init(),BrowserAgent.browserUtils.init(),BrowserAgent.funcUtils.init(),BrowserAgent.errorUtils.init(),BrowserAgent.evtUtils.init(),BrowserAgent.globals.init(),window.addEventListener("beforeunload",BrowserAgent.pageUtils.unloadEventHandler,!0),window.addEventListener("pagehide",BrowserAgent.pageUtils.unloadEventHandler,!0),BrowserAgent.pageUtils.init(),BrowserAgent.evtUtils.processRetryPayloadsFromSession(),"undefined"!=typeof BrowserAgentExtension&&BrowserAgentExtension.init(),BrowserAgent.globals.harvestIntervalId=setInterval(BrowserAgent.evtUtils.harvestEvts,BrowserAgent.globals.configs.METRICFREQUENCY);try{if(void 0!==performance.getEntriesByType("resource")){BrowserAgent.globals.isPerformanceResourceSupported=!0;var o="browsers default value";"function"==typeof performance.setResourceTimingBufferSize&&(o=BrowserAgent.globals.configs.RESOURCEBUFFERSIZE,performance.setResourceTimingBufferSize(o)),BrowserAgent.logger.info("Performance API supported, buffer set to: "+o)}}catch(e){BrowserAgent.logger.warn("Performance API not supported"),BrowserAgent.globals.isPerformanceResourceSupported=!1}BrowserAgent.globals.selfMonPerformance.baloadinit.totalTimeMS+=performance.now()-r}else BrowserAgent.logger.error("BrowserAgent.main: Invalid collector URL. Disabling Browser Agent...");else BrowserAgent.logger.info("BrowserAgent.main: Browser Agent is DISABLED.")}else BrowserAgent.logger.warn("BrowserAgent.main: Disabling Browser Agent ...")}else BrowserAgent.logger.error("BrowserAgent.main: BA app profile was not found. Disabling Browser Agent...");else BrowserAgent.logger.warn("BrowserAgent.main: Unsupported browser. Disabling Browser Agent for User Agent ["+navigator.userAgent+"]")},"prerender"===document.visibilityState&&BrowserAgent.logger.warn("Web page in pre-render state."),BrowserAgent.main()}catch(e){window.console&&"object"==typeof window.console&&window.console.log(new Date+" [CA Browser Agent]:  [ERROR] "+e.message)}
